在 numpy 数组中查找与所有其他行相比具有最小值的行
Posted
技术标签:
【中文标题】在 numpy 数组中查找与所有其他行相比具有最小值的行【英文标题】:Finding the row in an numpy array that has the smallest values compared to all other rows 【发布时间】:2021-11-18 16:35:19 【问题描述】:假设我有以下矩阵:
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]
这不是我要找的。p>
如果有人知道正确的函数,您能否指出该函数的文档?
谢谢。
【问题讨论】:
与所有其他行相比,元素最接近 0 的行你如何定义它? @Cresht,虽然它是一个 np 数组,但我不需要在 np 数组上使用 np 函数吗? @Psidom,我不确定如何定义它,就像你知道我们如何在最小二乘法中找到最接近所有其他点的点?我需要最接近[0,0,0,0]
的行
【参考方案1】:
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]
对行求和,然后找到最小值的行索引,最后找到行。
【讨论】:
【参考方案2】:这取决于您在说最近时如何定义距离。我猜你正在寻找 欧几里得距离,即这里的 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])
在这个虚拟示例中,两种方法给出的结果相同,但根据实际数据,它们可能会有所不同。
【讨论】:
【参考方案3】:想到的第一个方法是找到每一行的最小值。然后找到该数组的 argmin。
row_mins = A.min(axis=0)
row_with_minimum = row_mins.argmin()
然后要得到最小元素的行,做
A[row_with_minimum, :]
【讨论】:
以上是关于在 numpy 数组中查找与所有其他行相比具有最小值的行的主要内容,如果未能解决你的问题,请参考以下文章
过滤具有最小窗口长度的连续序列的 pandas 或 numpy 数组
在 Pandas、Python 中查找具有相同第一列的所有行的最小值、最大值、平均值