两个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 ]
结果数组的类型,会向上转换,与参与计算的数组中精度更高的类型相同。
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