2016-07-22 3 views
0

다른 배열에서 인덱스를 지정하여 액세스하려는 특정 값이 배열 x입니다.다차원 배열을 다른 배열로 효율적으로 인덱싱

예를 들어, x

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]]) 

이며 지수 I가 X의 배열 [1,2]을 돌려주는 함수를 원하는

idxs = np.array([[1,2], [4,3], [3,3]]) 

NX2 배열의 X [아르 4,3], x [3,3] 또는 [7, 23, 18]. 다음 코드는 그 트릭을 수행하지만, 아마도 for 루프를 피함으로써 커다란 배열의 속도를 높이고 싶습니다.

import numpy as np 

def arrayvalsofinterest(x, idx): 
    output = np.zeros(idx.shape[0]) 
    for i in range(len(output)): 
     output[i] = x[tuple(idx[i,:])] 
    return output 

if __name__ == "__main__": 
    xx = np.arange(25).reshape(5,5) 
    idxs = np.array([[1,2],[4,3], [3,3]]) 
    print arrayvalsofinterest(xx, idxs) 
+1

아니면, 즉 어레이의 도면을 이용하여보다 효율적 'X [idxs [: 0] idxs [:, 1]]'? 자세한 정보를 보려면 여기를 클릭하십시오. http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#purely-integer-array-indexing – Divakar

+0

@Divakar 하하, 페이지를 새로 고칠 때마다 그냥 쓰여졌습니다 :) – Alex

답변

3

당신은 axis0 좌표의 반복 가능한 및 axis1 좌표의 반복자에 전달할 수 있습니다. the Numpy docs here을 참조하십시오.

@Divakar이 코멘트에 지적한대로
i0, i1 = zip(*idxs) 
x[i0, i1] 

이 적은 메모리

x[idxs[:, 0], idxs[:, 1]] 
+0

@Divakar 네 말이 맞아! – Alex

관련 문제