如何根据Python中另一个数组中的值在一个数组中提取数据

时间:2014-02-04 21:39:10

标签: python arrays numpy

我有两个数组:

a = np.array([[0.3, 0.4, 0.3],[0.6, 0.2, 0.2],[0.1, 0.2, 0.7]]) 
b = np.array([[1,2,3], [4,5,6], [7,8,9]])

我希望能够根据a中每行中最大值的位置得到b中的值,预期输出应为:

[2, 4, 9]

感谢。

4 个答案:

答案 0 :(得分:4)

怎么样:

>>> a = np.array([[0.3, 0.4, 0.3],[0.6, 0.2, 0.2],[0.1, 0.2, 0.7]])
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> b[np.arange(len(b)),a.argmax(axis=1)]
array([2, 4, 9])

虽然你应该仔细检查轴;我总是把那些倒退。

答案 1 :(得分:1)

如果您将其作为2-d python列表:

answer = []
for r,row in zip(b,a):
    big = max(enumerate(row), key=operator.itemgetter(1))
    answer.append(r[big[0]])

当然,你可以做一个单行:

answer = [r[max(enumerate(row), key=operator.itemgetter(1))[0]] for r,row in zip(b,a)]

答案 2 :(得分:0)

def b_from_a(a,b):
    if len(a) != len(b):
        raise ValueError("Both lists should be the same length")
    for i,element in enumerate(a):
        if len(a[i]) != len(b[i]):
            raise ValueError("The lists in element {} are not of equal length".format(i))
        i_of_max = a.index(max(a))
        yield b[i][i_of_max]

这是纯粹的python。我不和NumPy做任何工作,所以虽然我确信有更好的代码可以让你到达你想去的地方,但这应该有效。

答案 3 :(得分:0)

试试这个:

result = np.zeros(len(a));
for i in range(len(a)):
    result[0] = b[i][a[i].argmax()];

print(result)

(只要np代表NumPy)