2014-01-21 2 views
2

이 질문은 실제 코드로 솔루션을 찾는 것보다 좀 더 추상적입니다. 내가 작업하고있는 일부 소프트웨어의 일부 코드를 이해하려고합니다. 특히, 나는 다른 3 차원 배열에 의해 인덱싱되는 4D numpy 배열로 작업하고있다. 나는 다음 페이지를 읽었습니다 : http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html 그러나 실제로 다루는 것의 복잡성을 다루지는 않습니다 (또는 제 상황에 그것을 완전히 적용하는 것을 이해하지 못합니다).배열을 이용한 탁아한 배열의 인덱싱

궁극적 인 목표는이 코드를 C 코드로 변환하는 것이므로이 배열을 액세스하여 변환 할 수있는 방법을 이해해야합니다. 누구든지 3D 배열 인덱싱을 사용하여 이러한 열세 번째 배열을 읽는 데 필요한 트릭이나 팁을 알고 있습니까? C에서 numpy 배열을 재구성하기 위해 따라야 할 절차가 있습니까?

도움이 될 것입니다.

state = history[delays, var, node, :]

history.shape = (4192, 2, 74, 1)

delays.shape = (74,1,74)

var.shape = (74,1,74)

node.shape = (74,1,74)

: 참조 다음의 경우

내가 처리하고있는 무슨이다

노드 행렬은 실제로는 [[[ 0 0 0... 00]] [[ 1 1 1 ... 1 1]] [[ 2 2 2 ... 2 2]] ... [[73 73 73 ... 73 73 ]]] 입니다. var 행렬은 모두 0입니다. 지연 행렬은 모두 모든 모듈러스의 다양한 값의 정수입니다.

고마워요!

답변

2

결과 배열의 모양은 (74, 1, 74, 1)입니다. delays 배열의 내용을 보는 것이 흥미로울 것입니다 : 실제로 5476 개의 다른 값을 갖습니까? 아니면 단지 74 개의 다른 값이 74 번 반복됩니까? 나는 이것이 실제로 varnode으로 일어나고 있기 때문에 묻습니다.

그들은 모두 다른 경우, 같은 색인의 최적화되지 않은 C 버전은 다음과 같이 될 것이다 :

float history[4192][2][74][1], state[74][1][74][1]; 
int delays[74][1][74]; 

for (int j = 0; j < 74; j++) { 
    for (int k = 0; k < 74; k++) { 
     state[j][k] = history[delays[j][0][k]][0][k][0]; 
    } 
} 

delays 경우 정말 아닌 2 차원 배열하지만 1 차원 배열은 옆에 74 시간 측을 반복 , np.all(np.equal.reduce(delays, axis=1)) 반환 True는, 당신은 위의 코드를 단순화 할 수 있습니다 즉, 경우 다음과 같이이 (다른 경우 도와 않음) 정적 인 경우를 통해 배열을 전달하기위한 위대한

float history[4192][2][74][1], state[74][1][74][1]; 
int delays[74]; /* keep only the unique values */ 

for (int j = 0; j < 74; j++) { 
    for (int k = 0; k < 74; k++) { 
     state[j][k] = history[delays[j]][0][k][0]; 
    } 
} 
1

4x4x4x4 개의 배열을 'a'라고합니다. 그러면 :

repr(a).replace('[', '{').replace(']', '}').replace('\n', '') 

프린트 아웃 C. 소비를위한 준비 배열

double a[4][4][4][4] = {{{{ 6.92719862e-01, 2.76015214e-01, 7.01148124e-01,   2.56710822e-01}, ....... 

인덱싱 그래서 파이썬 a[(0,1,2,3)]가 C에서 a[0][1][2][3] (와 같이 동일 할 것이며, 모두 동일한 좌표 것 사실 두 가지 모두에서 후자의 구문을 사용할 수 있습니다).

+0

는, 그러나 실제로 전송할 그 줄의 코드 C. 이상나는 C로 구축 된 역사를 이미 가지고있다. 그러나 numpy가 어떻게 사용되는지 읽는 데 어려움을 겪고 있기 때문에 접근하는 방법을 모르겠다. – user1220086

+0

4d 어레이에 색인을 생성하는 데 사용하는 어레이의 예를 들려 줄 수 있습니까? – U2EF1

+0

배열의 모양을 포함하도록 원래 질문을 편집했습니다. 고마워요 :) – user1220086

관련 문제