# 运算

  • 对数组进行基本的算术晕眩,将会对整个数组的所有元素进行逐一运算并将运算结果保存在一个新的数组内而不会破坏原有的数组。

    a = np.array( [20,30,40,50] )
    b = np.arange( 4 )
    c = a - b # array([20, 29, 38, 47])
    b**2 # array([0, 1, 4, 9])
    10*np.sin(a) # array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
    a<35 # array([ True, True, False, False])
    
    • 对于 +=*= 这一类操作符会修改原有的数组,而非新建。
    a = np.ones((2,3), dtype=int)
    a *= 3
    a
    array([[3, 3, 3],
           [3, 3, 3]])
    
  • A*B为元素间相乘,A@B或者A.dot(B)才是矩阵乘法。

    A = np.array( [[1,1],
                [0,1]] )
    B = np.array( [[2,0],
                [3,4]] )
    A * B                       # 元素间相乘
    A @ B                       # 矩阵乘法
    A.dot(B)                    # 矩阵乘法
    
  • 当两个数组进行运算时如果长度不一致则会应用广播机制,如果无法应用则报错。

    image

    a = array([[ 0,  0,  0],
           [10, 10, 10],
           [20, 20, 20],
           [30, 30, 30]])
    b = array([0, 1, 2])
    a + b
    array([[ 0,  1,  2],
           [10, 11, 12],
           [20, 21, 22],
           [30, 31, 32]])
    c
    array([[1],
           [2],
           [3],
           [4]])
    a + c
    array([[ 1,  1,  1],
           [12, 12, 12],
           [23, 23, 23],
           [34, 34, 34]])
    
    # 报错的情况
    a = np.arange(5)
    b = np.arange(6)
    a,b
    (array([0, 1, 2, 3, 4]), array([0, 1, 2, 3, 4, 5]))
    c=a-b
    ValueError                                Traceback (most recent call last)
    <ipython-input-27-508c408ffd98> in <module>()
    ----> 1 c=a-b
    
    
  • 当两个不同类型的数组进行运算操作时,将根据精度选择最复杂的作为结果的类型。

  • 一元操作例如求和等作为ndarray类方法实现,默认应用于整个数组但也可以通过指定轴参数沿数组的指定轴应用操作。

    b = np.arange(12).reshape(3,4)
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    
    b.sum()					# 对整个数组进行求和
    66
    b.sum(axis=0)				# 对每一列进行求和
    array([12, 15, 18, 21])
    b.sum(axis=1)				# 对每一行进行求和
    array([ 6, 22, 38])
    b.min(axis=1)				# 找出每一行的最小值
    array([0, 4, 8])
    
  • sort方法可对数组或数组某一维度就地排序,修改数组本身。