给出2D数组,我想获取该数组的特定列。
然后,我想获取数组中每一行的每个值,并将该值更改为当前值与该行的指定列中的最小值之间的最小值。
什么是有效的方法?谢谢。
这里是一个例子:
给出一个3x3矩阵:
array([[1, 2, 1],
[2, 2, 8],
[3, 7, 11]])
并且所选列=第2列
array([2, 2, 7])
对于矩阵中的每个值,我取该值与所选列对应行中的值之间的最小值
= [1, 2, 1; 2, 2, 2; 3, 7, 7]
对于大型矩阵,我该如何有效地做到这一点?谢谢。
答案 0 :(得分:2)
使用numpy.minimum
。您需要进行广播以保持列的尺寸,以免将行与整个列进行比较。
np.minimum(a, a[:, col, None])
MCVE
a = np.array([[1, 3, 1, 9, 4],
[2, 3, 7, 5, 5],
[9, 8, 8, 4, 5],
[6, 9, 5, 7, 9],
[9, 9, 1, 9, 1]])
col = 2 # array([1, 7, 8, 5, 1])
np.minimum(a, a[:, col, None])
array([[1, 1, 1, 1, 1],
[2, 3, 7, 5, 5],
[8, 8, 8, 4, 5],
[5, 5, 5, 5, 5],
[1, 1, 1, 1, 1]])