说我有一个数组
A = array([[1,2,3],
[4,5,6],
[7,8,9]])
索引数组是
B = array([[1], # want [0, 1] element of A
[0], # want [1, 0], element of A
[1]]) # want [2, 1] elemtn of A
通过这个索引数组B
,我想要一个3-by-1
数组,其元素取自数组A
,即
C = array([[2],
[4],
[8]])
我试过了numpy.choose
,但我做不到。
答案 0 :(得分:5)
为了答案的完整性...花哨的索引数组被广播到一个共同的形状,所以以下也可以工作,并让你最后重塑:
>>> A[np.arange(3)[:, None], B]
array([[2],
[4],
[8]])
答案 1 :(得分:3)
您可以这样做:
>>> A[np.arange(len(A)), B.ravel()].reshape(B.shape)
array([[2],
[4],
[8]])
答案 2 :(得分:2)
你可以这样做:
>>>np.diag(A[range(3),B]).reshape(B.shape)
array([[2],
[4],
[8]])
如果您想使用choose
,可以执行:np.choose(B.ravel(), A.T).reshape(B.shape)
。