Python科学计算(第2版)
上QQ阅读APP看书,第一时间看更新

2.1.1 创建

首先需要创建数组才能对其进行运算和操作。可以通过给array()函数传递Python的序列对象来创建数组,如果传递的是多层嵌套的序列,将创建多维数组(下例中的变量c):

    a = np.array([1, 2, 3, 4])
    b = np.array((5, 6, 7, 8))
    c = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
         b                c         
    ------------  ------------------
    [5, 6, 7, 8]  [[ 1,  2,  3,  4],
                   [ 4,  5,  6,  7],
                   [ 7,  8,  9, 10]]

数组的形状可以通过其shape属性获得,它是一个描述数组各个轴的长度的元组(tuple):

    a.shape  b.shape  c.shape
    -------  -------  -------
    (4,)     (4,)     (3, 4) 

数组a的shape属性只有一个元素,因此它是一维数组。而数组c的shape属性有两个元素,因此它是二维数组,其中第0轴的长度为3,第1轴的长度为4。还可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。下面的例子将数组c的shape属性改为(4,3),注意从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变:

    c.shape = 4, 3
    c
    array([[ 1,  2,  3],
           [ 4,  4,  5],
           [ 6,  7,  7],
           [ 8,  9, 10]])

当设置某个轴的元素个数为-1时,将自动计算此轴的长度。由于数组c有12个元素,因此下面的程序将数组c的shape属性改成了(2,6):

    c.shape = 2, -1
    c
    array([[ 1,  2,  3,  4,  4,  5],
           [ 6,  7,  7,  8,  9, 10]])

使用数组的reshape()方法,可以创建指定形状的新数组,而原数组的形状保持不变:

    d = a.reshape((2,2)) # 也可以用a.reshape(2,2)
       d           a      
    --------  ------------
    [[1, 2],  [1, 2, 3, 4]
     [3, 4]]              

数组a和d其实共享数据存储空间,因此修改其中任意一个数组的元素都会同时修改另一个数组的内容。注意在下面的例子中,数组d中的2也被改成了100:

    a[1] = 100    # 将数组a的第1个元素改为100
             a                 d      
    --------------------  ------------
    [  1, 100,   3,   4]  [[  1, 100],
    [  3,   4]]