第9节,numpy数组加减乘除基本操作

1. 加减乘除

两个ndarray之间支持加减乘除操作,要求这两个ndarray的shape必须相同

import numpy as pd

left_ndarray = pd.array([1, 2])
right_ndarray = pd.array([4, 5])

# 加法
result = left_ndarray + right_ndarray
print(result)   # [5 7]

# 减法
result = left_ndarray - right_ndarray
print(result)   # [-3 -3]

# 乘法
result = left_ndarray * right_ndarray
print(result)   # [ 4 10]

# 除法
result = left_ndarray / right_ndarray
print(result)   # [0.25 0.4 ]

result = left_ndarray // right_ndarray
print(result)   # [0 0]

ndarray 还支持 +=, -=, *= , /=, //=运算, 这样会修改现有数组而不是新建数组

import numpy as pd

left_ndarray = pd.array([7, 2])
right_ndarray = pd.array([4, 5])

# 加法
left_ndarray += right_ndarray
print(left_ndarray)   # [11  7]

# 减法
left_ndarray -= right_ndarray
print(left_ndarray)   # [7 2]

# 乘法
left_ndarray *= right_ndarray
print(left_ndarray)   # [28 10]

# 除法
left_ndarray //= right_ndarray
print(left_ndarray)   # [7 2]

left_ndarray /= right_ndarray
print(left_ndarray)   # 异常

上面的代码运行left_ndarray /= right_ndarray 会报错,错误内容是

TypeError: No loop matching the specified signature and casting was found for ufunc true_divide

报这个错误的原因是left_ndarray里元素的类型是int64, 而运行除法后的结果是float64, 重新对left_ndarray元素赋值时,将会转换为int64, numpy认为这样是不安全的,因此抛出异常,如果left_ndarray 的dtype是flaot64,就不会有异常了

import numpy as pd

left_ndarray = pd.array([7.0, 2.0])
right_ndarray = pd.array([4, 5])

left_ndarray /= right_ndarray
print(left_ndarray)   # [1.75 0.4 ]

结果数组的类型,会向上转换,与参与计算的数组中精度更高的类型相同。

2. 矩阵乘积

import numpy as pd

left_ndarray = pd.array([[1, 1],
                         [0, 1]])

right_ndarray = pd.array([[2, 0],
                          [3, 4]])

result = left_ndarray @ right_ndarray
print(result)

下面是另一种计算矩阵乘积方法

import numpy as pd

left_ndarray = pd.array([[1, 1],
                         [0, 1]])

right_ndarray = pd.array([[2, 0],
                          [3, 4]])

result = left_ndarray.dot(right_ndarray)
print(result)

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案