首页 > 解决方案 > 如何在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)

标签: pythonarraysnumpy

解决方案


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)

推荐阅读