我有一個相當大的二維陣列,我需要同時獲取軸 1 中最大值的索引和最大值本身。我可以按如下方式檢索這兩個值:
import numpy as np
a = np.arange(27).reshape(9, 3)
idx = np.argmax(a, axis=1)
max_val = np.max(a, axis=1)
不過,既然已經找到了最大值的索引,感覺應該可以用idx構造出最大值陣列,而不用再去查這個值了。
我意識到我可以使用np.choose(idx, a.T),但這涉及轉置矩陣,這比僅使用max. 我可以做類似的事情,np.array([a[i][idx[i]] for i in range(len(a))])但這涉及創建一個串列,這似乎又比呼叫np.max.
有沒有辦法在不重組陣列的情況下a用numpy 切片?idx
uj5u.com熱心網友回復:
你的a和argmax:
In [602]: a
Out[602]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23],
[24, 25, 26]])
In [603]: idx
Out[603]: array([2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int64)
使用該索引陣列的常見方法:
In [606]: a[np.arange(a.shape[0]),idx]
Out[606]: array([ 2, 5, 8, 11, 14, 17, 20, 23, 26])
一個更新的工具,可能更容易使用(如果不熟悉第一個):
In [607]: np.take_along_axis(a,idx[:,None],1)
Out[607]:
array([[ 2],
[ 5],
[ 8],
[11],
[14],
[17],
[20],
[23],
[26]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537627.html
上一篇:鏈表c 中的append方法
