在numpy中索引一個(gè)數(shù)組又一個(gè)數(shù)組假設(shè)我有一個(gè)矩陣A具有一些任意值:array([[ 2, 4, 5, 3],
[ 1, 6, 8, 9],
[ 8, 7, 0, 2]])和矩陣B其中包含A中元素的索引:array([[0, 0, 1, 2],
[0, 3, 2, 1],
[3, 2, 1, 0]])如何從A指尖B,即:A[B] = [[2, 2, 4, 5],
[1, 9, 8, 6],
[2, 0, 7, 8]]
3 回答
米琪卡哇伊
TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
NumPy's advanced indexing -
A[np.arange(A.shape[0])[:,None],B]
linear indexing -
m,n = A.shape out = np.take(A,B + n*np.arange(m)[:,None])
In [40]: AOut[40]: array([[2, 4, 5, 3], [1, 6, 8, 9], [8, 7, 0, 2]])In [41]: BOut[41]: array([[0, 0, 1, 2], [0, 3, 2, 1], [3, 2, 1, 0]])In [42]: A[np.arange(A.shape[0])[:,None],B]Out[42]: array([[2, 2, 4, 5], [1, 9, 8, 6], [2, 0, 7, 8]])In [43]: m,n = A.shapeIn [44]: np.take(A,B + n*np.arange(m)[:,None])Out[44]: array([[2, 2, 4, 5], [1, 9, 8, 6], [2, 0, 7, 8]])
侃侃爾雅
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
take_along_axis
In [203]: A = np.array([[ 2, 4, 5, 3], ...: [ 1, 6, 8, 9], ...: [ 8, 7, 0, 2]]) In [204]: B = np.array([[0, 0, 1, 2], ...: [0, 3, 2, 1], ...: [3, 2, 1, 0]]) In [205]: np.take_along_axis(A,B,1) Out[205]: array([[2, 2, 4, 5], [1, 9, 8, 6], [2, 0, 7, 8]])
put_along_axis.
HUX布斯
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
for
outlist = []for i in range(len(B)): lst = [] for j in range(len(B[i])): lst.append(A[i][B[i][j]]) outlist.append(lst)outarray = np.asarray(outlist)print(outarray)
outlist = [ [A[i][B[i][j]] for j in range(len(B[i]))] for i in range(len(B)) ]outarray = np.asarray(outlist)print(outarray)
[[2 2 4 5] [1 9 8 6] [2 0 7 8]]
添加回答
舉報(bào)
0/150
提交
取消
