2012-07-12 6 views
2

다른 배열에 저장된 z 좌표를 사용하여 3D 행렬의 요소로 배열을 만들고 싶습니다. 가장 간단한 방법은 다음과 같습니다아래 첨자로 배열을 사용하여 행렬의 요소에 액세스

X=2; 
Y=3; 
lastZ=10000000 
for i=1:lastZ 
    new_array=matrix(X,Y,Z(i)); 
end 

하지만 사용하여 "벡터화"방법을 찾고 있어요에만 행렬 대신에 루프.

new_array=matrix(X,Y,Z); 

나는 Z가 배열 및 X와 Y에 넣을 수 없다는 것을 이해 : 나는 다음과 같은 코드를 시도했다 그러나 나는 오류 메시지 "첨자 지수는 실제 양의 정수 또는 전에 논리 여야합니다"를 얻을 이들은 정수입니다. 한 줄로 된 코드로 그러한 배열을 만드는 더 좋은 방법이 있습니까?

답변

3

당신이 시도 할 수 :

new_array=squeeze(matrix(X,Y,1:Z)); 
+0

명확하고 깨끗 그! 나는 _bsxfun_와 _arrayfun_를 이해하려고 노력하는 데 많은 시간을 보냈지 만 _squeeze _...하지만 여전히 new_array = matrix (X, Y, Z)가 작동하지 않는 이유는 궁금합니다. 코드의 유일한 차이점은 _squeeze_의 사용법입니다. new_array를 평평하게 만드시겠습니까? 색인 생성에 문제가 있다는 뜻입니다. – workson

+0

두 번째 차원을 넘어서는 차원에 대한 인덱스를 작성하면 "일반"벡터를 얻지 못합니다. 'matrix (X, Y, 1 : 10) '을 표시하여 직접보십시오. 실제로, 나는 압박에 비틀 거리기 전에 너무 많은 말썽이 있었다. –

+0

분명히 _squeeze_를 사용하면 곧은 _for_ 루프보다 훨씬 느립니다 !!! 나는 ** Matlab 2012a **에 있습니다. _for_ 루프 성능 향상에 대해 많이 읽었습니다. 내 코드가 모든 벡터화 단계에서 실행 시간의 측면에서 악화되는 것처럼 보입니다. 어쩌면 _find_, _sum_ 또는 _squeeze_와 같은 함수 때문에 _for_ 루프를 피하려고합니다. – workson

관련 문제