Numpy的基本运算
矢量化运算 即numpy中的数组 不用编写循环就可以进行批量运算,称之为矢量化运算
一、大小相同的数组之间的运算
import numpy as np
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[1,1,1],[2,2,2]])
print(arr1+arr2)
print(arr1–arr2)
print(arr1*arr2)
print(arr1/arr2)
[[2 3 4]
[6 7 8]]
[[0 1 2]
[2 3 4]]
[[ 1 2 3]
[ 8 10 12]]
[[1. 2. 3. ]
[2. 2.5 3. ]]
二、大小不同的数组间的运算
不同大小的数组之间的运算叫做广播。广播机制是 NumPy 中一个强大的特性,它允许在不同形状的数组之间进行元素级运算。广播机制的规则如下:
广播规则口诀:
1、维度对齐:维度数不同,小的在左边补 1
2、维度兼容:每个维度要么相等,要么有一个为 1
3、智能扩展:维度为 1 的沿着该轴复制,匹配另一个数组
规则1:如果俩个数组的维度数不相同,那么小维度数组的形状将会在最左边补1。
import numpy as np
#一维数组
arr3 = np.array([1,2,3]) #形状为(3,)
#这里arr1数组为一维数组 计算机内部会将arr1转换成二维数组 即1行3列即
# 对 arr1 应用规则 1,在其形状最左边补 1,变为 (1, 3) [[1,2,3]]
# 此时 arr1 形状 (1, 3) 和 arr2 形状 (3, 1) 满足广播条件
#二维数组
arr4 = np.array([[4],[5],[6]]) ## 形状为 (3, 1)
print(arr3 + arr4)
arr4
# 广播后的 arr3: 广播后的 arr4: 结果:
# [[1, 2, 3], [[4, 4, 4], [[5, 6, 7],
# [1, 2, 3], + [5, 5, 5], = [6, 7, 8],
# [1, 2, 3]] [6, 6, 6]] [7, 8, 9]]
#
# 具体计算:
# 第 1 行:[1+4, 2+4, 3+4] = [5, 6, 7]
# 第 2 行:[1+5, 2+5, 3+5] = [6, 7, 8]
# 第 3 行:[1+6, 2+6, 3+6] = [7, 8, 9]
[[5 6 7]
[6 7 8]
[7 8 9]]
array([[4],
[5],
[6]])
规则2:如果俩个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度大小(元素个数)为1的维度开始扩展 ,(维度必须是1开始)直到所有维度都一样, 以匹配另一个数组的形状。
import numpy as np
# 二维数组
arr5 = np.array([[1, 2, 3]]) # 形状为 (1, 3)
# 二维数组
arr6 = np.array([[4], [5], [6]]) # 形状为 (3, 1)
# 原始数组:
# arr5 (1×3): arr6 (3×1):
# [1, 2, 3] [[4],
# [5],
# [6]]
#
# 广播过程:
# arr5 向下复制 arr6 向右复制
# ↓ ↓
# [[1, 2, 3]] [[4, 4, 4],
# [1, 2, 3]] [5, 5, 5],
# [1, 2, 3]] [6, 6, 6]]
#
# 最终计算:
# [[1+4, 2+4, 3+4],
# [1+5, 2+5, 3+5],
# [1+6, 2+6, 3+6]]
#
# = [[5, 6, 7],
# [6, 7, 8],
# [7, 8, 9]]
arr5 + arr6
array([[5, 6, 7],
[6, 7, 8],
[7, 8, 9]])
规则3:如果俩个数组的形状在任何一个维度上都不匹配,并且没有任何一个维度大小等于1,那么会引发异常。
import numpy as np
#一维数组
arr7 = np.array([1,2,3])
#一维数组
arr8 = np.array([4,5])
try:
result = arr7 + arr8
print(result)
except ValueError as errorMessage:
print("错误信息:",errorMessage)
错误信息: operands could not be broadcast together with shapes (3,) (2,)


![[人工智能]Python08:NumPy 检查与诊断-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261012175023-6acd1ddf8668b-220x150.png)