我有两个数组:
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]
感谢。
答案 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)