Numpy 数组广播机制 实例 broadcast
Apr022019
#!/usr/bin/env python3
import pandas as pd
import numpy as np
"""
Numpy 数组广播机制 实例 broadcast
broadcasting的规则
对两个numpy数组之间的作二元计算,broadcasting须遵循一下规则:
如果两个数组维数不相等,维数较低的数组的shape会从左开始填充1,直到和高维数组的维数匹配
如果两个数组维数相同,但某些维度的长度不同,那么长度为1的维度会被扩展,和另一数组的同维度的长度匹配
如果两个数组维数相同,但有任一维度的长度不同且不为1,则报错
broadcast 机制 参考
https://zhuanlan.zhihu.com/p/33318510
http://liao.cpython.org/numpy08/
"""
def main():
x = np.array([[1], [2], [3]]) # (3,1)
y = np.array([4, 5, 6]) # (1,3)
print(f"x.shape={x.shape}, y.shape={y.shape}")
# 对 y 广播 x
b = np.broadcast(x, y)
print('-------------------------------------------------------')
print(b.shape)
# 它拥有 iterator 属性,基于自身组件的迭代器元组
# x 扩展成
"""
1 1 1
2 2 2
3 3 3
"""
# 扩展成
"""
4 5 6
4 5 6
4 5 6
"""
print('对 y 广播 x:')
r, c = b.iters
for m in r:
print(f"m={m}") # 按 先行 后列的顺序迭代
for n in c:
print(f"\tn={n}")
# shape 属性返回广播对象的形状
print('广播对象的形状:')
print(b.shape)
print('\n')
# 手动使用 broadcast 将 x 与 y 相加
b = np.broadcast(x, y)
c = np.empty(b.shape)
print('手动使用 broadcast 将 x 与 y 相加:')
print(c.shape)
print('\n')
c.flat = [u + v for (u, v) in b]
print('调用 flat 函数:')
print(c)
print('\n')
# 获得了和 NumPy 内建的广播支持相同的结果
print('x 与 y 的和:')
print(x + y)
if __name__ == '__main__':
main()
赞 赏微信赞赏 支付宝赞赏