python - 广播——将一个 (NxN) 数组乘以一个 (M) 数组得到一个 (NxNxM) 数组

标签 python numpy

我有两个 numpyndarrays

a.shape # -> (3, 3)
b.shape # -> (5,)

我想计算一个 c 数组,定义为

c.shape # -> (3, 3, 5)
c[...,i] = a*b[i]

(c 的确切形状并不重要,因为我总是可以调换它的轴)。

在我看来,到目前为止发布我的编码尝试会造成不必要的尴尬,这就像 a[:,None,:]*b[None,:] 的许多变体,这就足够了说,不是吗?

我怀疑 np.einsum() 可能是答案,但它的下标命令的语法在我脑海中飘过...

最佳答案

一个不错的解决方案是使用神奇的 einsum功能:

>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> b = np.array([10, 100, 1000, 10000, 100000])
>>> c = np.einsum('ij,k->ijk', a, b)
>>> c[1, 2, 3]
60000
>>> a[1, 2]
6
>>> b[3]
10000

我喜欢它,因为它使转换 ij,k -> ijk 非常明确。也可能,更简洁,是使用简单的广播:

>>> c = a[:, :, None] * b[None, None, :]
>>> c.shape
(3L, 3L, 5L)

使用 的地方: 使用一个维度,None 沿着一个维度传播。

关于python - 广播——将一个 (NxN) 数组乘以一个 (M) 数组得到一个 (NxNxM) 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37572393/

相关文章:

python - Tensorflow 中是否有用于改组或置换张量的内置函数?

Python:如果存在空值,如何将 Pyspark 列转换为日期类型

python - Numpy:使用 2D 索引数组访问 2D 数组

python - 查找二维数组中具有某些非零元素的列的索引

python - PIL.ImageTk.PhotoImage() 性能不一致

python - 高效的cython文件读取、字符串解析和数组构建

python - 用于热图的 pandas 中的 bin DataFrame

Python:如何从字典中删除元素并将其作为列表返回?

python - DataError : (psycopg2. DataError)整数的输入语法无效

python - 使用 sklearn 的 PCA