在 numpy 数组中查找与所有其他行相比具有最小值的行

Finding the row in an numpy array that has the smallest values compared to all other rows

假设我有以下矩阵:

A = [[7,5,1,2]
     [10,1,3,8]
     [2,2,2,3]]

我需要提取与所有其他行相比元素最接近 0 的行,也就是元素最少的行。所以我需要 [2,2,2,3]

我尝试了很多东西,np.min、np.amin、np.argmin

但是所有人都给我每行的最小值,例如:

[2,1,1,2]

这不是我要找的。

如果有人知道正确的函数,你能指点我函数的文档吗?

谢谢。

想到的第一个方法是找到每一行的最小值。然后找到该数组的argmin。

row_mins = A.min(axis=0)
row_with_minimum = row_mins.argmin()

然后要获取具有最小元素的行,执行

A[row_with_minimum, :]
import numpy as np

A = np.array([[7,5,1,2],
             [10,1,3,8],
             [2,2,2,3]])

print(print(A[np.argmin(A.sum(axis=1))]))

# [2 2 2 3]

对行求和,然后求最小值的行索引,最后求行。

这取决于你在说最近时如何定义距离。我猜您正在寻找 欧氏距离 ,即此处的 L2 范数。在这种情况下,您可以找到所有行的最小平方和:

A[(A ** 2).sum(1).argmin()]
# array([2, 2, 2, 3])

您还可以通过 L1 范数或与 0 的绝对差之和找到最接近

A[np.abs(A).sum(1).argmin()]
# array([2, 2, 2, 3])

在这个虚拟示例中,两种方法给出的结果相同,但根据实际数据可能会有所不同。