NumPy的ndarray

NumPy 提供一种对象用来表示数组,这就是 ndarray。 Python 中 list 也可以用来表示数组,但是由于效率不高,在科学计算中并不采用。

导入 NumPy 库

在使用之前,首先要导入 NumPy 库:

import numpy as np

创建数组

创建一位数组:

In [4]: a = np.array([1 ,2 ,3 ,4]) 
In [5]: a
Out[5]: array([1, 2, 3, 4])

创建多为数组:

In [7]: b = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
In [8]: b
Out[8]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

访问数组

对于刚才创建的数组 a ,若要访问其第二个值:

In [10]: a[1]
Out[10]: 2

注意:取值是以序号 0 开始的。

若要访问多个元素:

In [31]: a[1:3]
Out[31]: array([2, 3])

这里访问的是第2到第4个元素,可见第4个并不包括在内。

若要修改 a 中第二个值:

In [15]: a[1]=999
In [16]: a
Out[16]: array([  1, 999,   3,   4])

若要对 a 中多个元素赋值:

In [32]: a[1:3]=666,777
In [33]: a
Out[33]: array([  1, 666, 777,   4])

这些方法对于二维数组也是同样。

生成时间轴数组

做科学计算的时候,经常会用到一个数组,用来表示时间轴。

例如从 0s 开始,到 5s 为止,其间每隔 0.1s 插入一个点,用数组来表示: [ 0 , 0.1, 0.2, ……, 4.8, 4.9, 5]。 中间的值由于节省篇幅,用“……” 来代替。

在 NumPy 中,使用 arange 函数即可完成这项操作:

In [17]: c = np.arange(0,1,0.1)
In [18]: c
Out[18]: array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

这里生成了一个 0~1 间,以 0.1 为递增的,注意并没有值为 1 的点。

用函数生成数组

这有点像数列,我们有了一个数列的通项函数,想按照序数从1开始生成一个数组,这用到了 NumPy 的 fromfunction 函数:

In [22]: def maxiee(i):
    ...:     return i%3
    ...: 
In [23]: d = np.fromfunction(maxiee,(10,))
In [24]: d
Out[24]: array([ 0.,  1.,  2.,  0.,  1.,  2.,  0.,  1.,  2.,  0.])

其中, fromfunction 的第二个参数用来表示矩阵的维数,在这里是一个一维矩阵。

下面这个例子用来演示生成一个二维的九九乘法表:

In [25]: def maxiee(i,j):
    ...:     return (i+1)*(j+1)
    ...: 
In [26]: e = np.fromfunction(maxiee,(9,9))
In [27]: e
Out[27]: 
array([[  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.],
       [  2.,   4.,   6.,   8.,  10.,  12.,  14.,  16.,  18.],
       [  3.,   6.,   9.,  12.,  15.,  18.,  21.,  24.,  27.],
       [  4.,   8.,  12.,  16.,  20.,  24.,  28.,  32.,  36.],
       [  5.,  10.,  15.,  20.,  25.,  30.,  35.,  40.,  45.],
       [  6.,  12.,  18.,  24.,  30.,  36.,  42.,  48.,  54.],
       [  7.,  14.,  21.,  28.,  35.,  42.,  49.,  56.,  63.],
       [  8.,  16.,  24.,  32.,  40.,  48.,  56.,  64.,  72.],
       [  9.,  18.,  27.,  36.,  45.,  54.,  63.,  72.,  81.]])