numpy 2d数组,将每行的每个索引剪切到该索引和特定列的最小值

时间:2019-06-26 14:37:59

标签: python numpy

给出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]

对于大型矩阵,我该如何有效地做到这一点?谢谢。

1 个答案:

答案 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]])