numpy广播

广播是 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值