在 NumPy 数组的每一列中找到两个最小值的最快方法

Fastest way to find two minimum values in each column of NumPy array

如果我想在 NumPy 数组的每一列中找到最小值,我可以使用 numpy.amin() 函数。但是,有没有一种方法可以找到每列中的两个最小值,这比对每列进行排序更快?

您可以简单地沿列使用 np.partition 以获得最小的 N 数字 -

N = 2
np.partition(a,kth=N-1,axis=0)[:N]

这实际上并没有对整个数据进行排序,只是将其分成两个 部分,使得最小的 N 个数字位于第一个 部分 , 也称为 partial-sort.

Bonus(获取前 N 个元素): 同样,要获取每个列的前 N 个数字,只需使用负 kth 值 -

np.partition(a,kth=-N,axis=0)[-N:]

沿其他轴和更高的 dim 数组

要沿其他轴使用它,请更改 axis 值。因此,沿着行,对于二维数组,它将是 axis=1,对于更高维度的 ndarrays,它将以相同的方式扩展。

使用 min() 方法,并指定要平均的轴:

a = np.random.rand(10,3)
a.min(axis=0)

给出:

array([0.04435587, 0.00163139, 0.06327353])


a.min(axis=1)

给予

array([0.01354386, 0.08996586, 0.19332211, 0.00163139, 0.55650945,
       0.08409907, 0.23015718, 0.31463493, 0.49117553, 0.53646868])