在 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])
在这个虚拟示例中,两种方法给出的结果相同,但根据实际数据可能会有所不同。
假设我有以下矩阵:
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])
在这个虚拟示例中,两种方法给出的结果相同,但根据实际数据可能会有所不同。