9

考虑以下 NumPy 数组:

a = np.array([[1,4], [2,1],(3,10),(4,8)])

这给出了一个如下所示的数组:

array([[ 1,  4],
       [ 2,  1],
       [ 3, 10],
       [ 4,  8]])

我要做的是找到第二列的最小值(在本例中为 1),然后报告该对的另一个值(在本例中为 2)。我尝试过使用 argmin 之类的东西,但这被第一列中的 1 绊倒了。

有没有办法轻松做到这一点?我也考虑过对数组进行排序,但我似乎无法让它以一种将这些对保持在一起的方式工作。数据是由如下循环生成的,所以如果有一种更简单的方法可以做到这一点而不是numpy 数组,我也会把它作为答案:

results = np.zeros((100,2))

# Loop over search range, change kappa each time
for i in range(100):
    results[i,0] = function1(x)
    results[i,1] = function2(y)
4

2 回答 2

21

怎么样

a[np.argmin(a[:, 1]), 0]

分解

一种。抓住第二列

>>> a[:, 1]
array([ 4,  1, 10,  8])

湾。获取第二列最小元素的索引

>>> np.argmin(a[:, 1])
1

C。用那个索引a来获取对应的行

>>> a[np.argmin(a[:, 1])]
array([2, 1])

d。并取第一个元素

>>> a[np.argmin(a[:, 1]), 0]
2
于 2013-02-19T11:46:31.067 回答
5

使用np.argmin可能是解决这个问题的最好方法。要在纯 python 中执行此操作,您可以使用:

min(tuple(r[::-1]) for r in a)[::-1]

于 2013-02-19T12:07:32.280 回答