python - 沿 B 广播 A 的每一行,避免 `repeat`

标签 python numpy array-broadcasting

我有 2 个二维数组,其中 1 个轴的维度相同:

a = np.array(np.arange(6).reshape((2,3)))
b = np.array(np.arange(12).reshape((3,4)))

我想将a的每一行与b相乘广播,即

b_r = np.repeat(b[:,:,None], 2, axis=2)
ab = a.T[:,None,:] * b_r

是否可以在避免repeat 的同时进行广播?这个想法是为了避免为 repeat 操作分配不必要的内存。

最佳答案

您可以只输入 b[:,:,None] 而无需重复,如 broadcasting其定义将为您播放。

因此,简单地做 -

ab = a.T[:,None,:]*b[:,:,None]

我们可以通过跳过 a 的尾部 : 并使用 ... 替换 来使其更紧凑: ,:b,像这样 -

ab = a.T[:,None]*b[...,None]

对于 kicks,这里使用 np.einsum ,它的性能会稍差一些,但一旦我们超越了它的字符串表示法,它就会更具表现力 -

ab = np.einsum('ij,jk->jki',a,b)

关于python - 沿 B 广播 A 的每一行,避免 `repeat`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43605380/

相关文章:

python - 如何将 4d RGB 图像数据转换为 LogisticRegression 的 2d 数组

python - 简化循环内的 numpy.dot

python - 对角阵列上的 numpy 线性代数,没有显式重复

python - TensorFlow 中的最大 margin 损失

python - 调整 Excel 单元格大小以适合图像

python - 将 bool 值作为输入传递给方法

python - 如何使用数据矩阵中的 nans 计算相关矩阵

python - 从 NumPy 中的对象数组获取属性

python - 乘积向量化

python - 我在我的代码 python 中做错了什么,它不会打印总成本?