当前位置: 首页 > Machine Learning, Python, 程序代码 > 正文

Numpy 数组广播机制 实例 broadcast

#!/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()
赞 赏

   微信赞赏  支付宝赞赏


本文固定链接: https://www.jack-yin.com/coding/2731.html | 边城网事

该日志由 边城网事 于2019年04月02日发表在 Machine Learning, Python, 程序代码 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Numpy 数组广播机制 实例 broadcast | 边城网事

Numpy 数组广播机制 实例 broadcast 暂无评论

发表评论

快捷键:Ctrl+Enter