Numpy:根据条件获取最小值的索引

4 投票
3 回答
3743 浏览
提问于 2025-04-17 20:57

我有一个这样的数组:

array([[ 10, -1],
       [ 3,  1],
       [ 5, -1],
       [ 7,  1]])

我想要的是找到第一列中最小值的行的索引,同时第二列的值要是-1。

简单来说,就是用np.argmin()这个函数,但要加个条件,要求第二列的值等于-1(或者其他任何值也可以)。

在我的例子中,我想得到2,因为[ 5, -1]的索引是2。

我很确定有个简单的方法可以做到这一点,但我找不到。

3 个回答

0

这个方法效率不高,但如果你有一个比较小的数组,并且想要一个一行代码的解决方案:

>>> a = np.array([[ 10, -1],
...               [ 3,  1],
...               [ 5, -1],
...               [ 7,  1]])
>>> [i for i in np.argsort(a[:, 0]) if a[i, 1] == -1][0]
2
2

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种时候,我们需要找到问题的根源,通常可以通过查看错误信息来帮助我们理解发生了什么。

错误信息就像是程序给我们的提示,它告诉我们哪里出了问题。比如,可能是某个变量没有定义,或者某个函数没有正确调用。理解这些错误信息是解决问题的第一步。

此外,很多时候我们可以在网上找到类似的问题和解决方案,比如在StackOverflow这样的论坛上。这里有很多开发者分享他们的经验和解决办法,我们可以借鉴他们的思路。

总之,遇到问题时,不要慌张,仔细查看错误信息,利用网络资源,逐步排查,最终就能找到解决办法。

np.argwhere(a[:,1] == -1)[np.argmin(a[a[:, 1] == -1, 0])]
2
import numpy as np

a = np.array([
    [10, -1],
    [ 3,  1],
    [ 5, -1],
    [ 7,  1]])

mask = (a[:, 1] == -1)

arg = np.argmin(a[mask][:, 0])
result = np.arange(a.shape[0])[mask][arg]
print result

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答