python - 如何在numpy中将(n,)数组添加到(n,m)数组?
问题描述
考虑有两个数组:
A
形状(n,)
B
和形状(n,m)
如何将这两个加在一起,以便A[i]
添加到所有 m 值B[i]
?
当然我可以用 for 循环来做到这一点,但我想学习如何正确使用 numpy。
那么在 numpy 中有什么优雅的方法呢?
示例(n,) + (n,m)
:
A = [1,2]
B = [[1,2,3],[4,5,6]]
A + B should be [[2,3,4],[6,7,8]]
我如何添加另一种方式也会很有趣(n,) + (m,n)
:
A = [1,2,3]
B = [[1,2,3],[3,4,5]]
A + B should be [[2,4,6],[4,6,8]]
编辑:
我指的形状和我写的不一样。
第一个例子不是(n,1)+(n,m)
,第二个例子不是(n,1)+(m,n)
。
在此编辑之前,我(n,)
与(n,1)
. (和(1,n)
)
解决方案
Numpy 有一个名为broadcasting
. 查看文档
广播一词描述了 numpy 在算术运算期间如何处理具有不同形状的数组。受限于某些限制,较小的阵列在较大的阵列上“广播”,以便它们具有兼容的形状。广播提供了一种向量化数组操作的方法,以便循环在 C 而不是 Python 中发生。它在不制作不必要的数据副本的情况下做到这一点,并且通常会导致有效的算法实现。但是,在某些情况下,广播不是一个好主意,因为它会导致内存使用效率低下,从而减慢计算速度。
您可以添加这两个数组,您应该只更改数组 A 的尺寸
A = np.array([1,2,3]).reshape(1,3)
B = np.array([[1,2,3],[3,4,5]]) # this is already 2 dimensional
print(A + B)
推荐阅读
- r - R 如何解释这个数据集?
- apache - Npm/Yarn 在 gitlab-ci.yml 上通过远程 apache 服务器进行 ssh 后没有安装必要的包
- json - 有没有办法让 JSON 内容标签成为文件的内容?
- python - 如何将热图与等高线图结合起来?
- r - R - 将操作应用于每列数据框 X 引用数据框 Y 的条目
- r - R:通过合并两个变量的内容来创建一个新变量
- java - 给定字符串的空心正方形
- python - 如何在 tkinter.Listbox 中重置选择顺序?
- macos - Flutter 无法在 Mac 上安装
- python - pip install vs python -m pip install with virtualenvs