广播是 NumPy 处理不同形状数组数值计算的机制,当数组形状不同时,会自动触发广播规则:
- 形状相同:直接对应元素运算。
- 形状不同:通过扩展数组维度使形状匹配后运算(需符合广播规则)。
示例代码
python
运行
import numpy as np
# 形状不同的数组广播运算
a = np.array([[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]])
b = np.array([1,2,3])
print(a + b) # 自动广播b为4行3列后相加
# 输出:
# [[ 1 2 3]
# [11 12 13]
# [21 22 23]
# [31 32 33]]
二、数组迭代
通过迭代器访问数组元素,支持指定遍历顺序:
order='C'
:行序优先order='F'
:列序优先
示例代码
python
运行
import numpy as np
a = np.arange(6).reshape(2,3)
print("行序优先遍历:")
for x in np.nditer(a, order='C'):
print(x, end=",") # 输出:0,1,2,3,4,5,
print("\n列序优先遍历:")
for x in np.nditer(a, order='F'):
print(x, end=",") # 输出:0,3,1,4,2,5,
三、数组操作:修改数组形状
1. reshape () 函数
不改变数据,仅修改数组形状。
python
运行
a = np.arange(8)
b = a.reshape(4, 2) # 转换为4行2列
print(b)
# 输出:
# [[0 1]
# [2 3]
# [4 5]
# [6 7]]
2. flat 属性
数组元素迭代器,用于遍历所有元素。
python
运行
a = np.arange(9).reshape(3,3)
print("迭代所有元素:")
for element in a.flat:
print(element, end=" ") # 输出:0 1 2 3 4 5 6 7 8
3. flatten () 函数
展平数组并返回拷贝(修改不影响原数组)。
python
运行
a = np.arange(6).reshape(2,3)
print(a.flatten(order='C')) # 行序展平:[0 1 2 3 4 5]
print(a.flatten(order='F')) # 列序展平:[0 3 1 4 2 5]
4. ravel () 函数
展平数组并返回视图(修改会影响原数组)。
python
运行
a = np.arange(8).reshape(2,4)
print(a.ravel()) # 行序展平:[0 1 2 3 4 5 6 7]
print(a.ravel(order='F')) # 列序展平:[0 4 1 5 2 6 3 7]
四、数组操作:翻转数组
通过维度转换实现数组翻转,常用函数:
1. transpose () 函数 / T 属性
对换数组维度(矩阵转置)。
python
运行
a = np.arange(12).reshape(3,4)
print(np.transpose(a)) # 等价于a.T
# 输出:
# [[ 0 4 8]
# [ 1 5 9]
# [ 2 6 10]
# [ 3 7 11]]
2. rollaxis () 函数
滚动指定轴到新位置。
python
运行
a = np.arange(24).reshape(2,3,4)
b = np.rollaxis(a, 2) # 将轴2滚动到轴0位置
print(b.shape) # 输出:(4,2,3)
3. swapaxes () 函数
交换两个轴的位置。
python
运行
a = np.arange(24).reshape(2,3,4)
b = np.swapaxes(a, 2, 0) # 交换轴2和轴0
print(b.shape) # 输出:(4,3,2)
五、数组操作:修改数组维度
1. broadcast_to () 函数
将数组广播到指定形状(返回只读视图)。
python
运行
a = np.arange(4).reshape(1,4)
print(np.broadcast_to(a, (4,4))) # 广播为4行4列
# 输出:
# [[0 1 2 3]
# [0 1 2 3]
# [0 1 2 3]
# [0 1 2 3]]
2. expand_dims () 函数
扩展数组维度。
python
运行
x = np.arange(1,5).reshape((2,2))
y = np.expand_dims(x, axis=0) # 在轴0扩展维度
print(y.shape) # 输出:(1,2,2)
3. squeeze () 函数
删除数组中的一维条目。
python
运行
x = np.arange(1,10).reshape((1,3,3))
y = np.squeeze(x) # 删除维度为1的轴
print(y.shape) # 输出:(3,3)