仅使用广播在指定的列向量处从矩阵中减去列向量

我想使用另一个向量从 numpy 矩阵中减去一个列向量,该向量是需要从主矩阵中减去第一个列向量的列的索引。例如。


M = array([[  1,   2,   1,   1],

           [  2,   1,   1,   1],

           [  1,   1,   2,   1],

           [  2,   1,   1,   1],

           [  1,   1,   1,   2]])  # An example matrix


V = array([1, 1, 1, 1, 1]) # An example column vector


I = array([0, 3, 2, 3, 1, 3, 3]) # The index maxtrix

现在我想在 I 中给出的列号处从 M 中减去 V。例如。I[0] 为 0,因此从矩阵 M 的第一列(零索引)中减去 V。


同理 I[1] = 3,从矩阵 M 的第四列(三个索引)中减去 V。


在操作结束时,由于 3 在 I 中出现了 4 次,所以 V 将从第三列中减去,即 M-4 次的最后一列。


我需要只使用广播而不是循环来做到这一点。


我尝试了以下方法:


M[:, I] - V[np.newaxis, :].T

但它最终会广播结果矩阵的列数比 M 中的列数多。


慕姐8265434
浏览 194回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python