2013-02-23 2 views
0

나는 형태의 매우 큰 매트릭스를 생성하고 싶습니다 :matlab/octave에서 큰 행렬을 생성하는 방법은 무엇입니까?

n 개까지의 값을
[[1,2,3] 
,[2,3,4] 
,[3,4,5] 
... 
,[n,n+1,n+2]] 

백만에 이상. 어떻게 이것을 MATLAB/옥타브에서합니까?

나는 함수형 프로그래밍을 사용하여 [1..n]에서 큰 목록을 생성하고 그 목록에 변환 함수를 매핑합니다. matlab/octave는 큰 행렬을 생성하는 비슷한 관용구를 가지고 있다고 가정하지만, 나는 아무것도 찾을 수 없다.

답변

3

이 작동합니다 rc 다음

M = bsxfun(@plus, 0:c-1, (1:r)'); 
+0

매우 간단합니다. 감사 –

2

원하는 행렬의 행과 열의 수,하자 :

n=100000;  
A=[[1:n]' [2:n+1]' [3:n+2]']; 
2
A=zeros(n, 3); 
for column=1:3 
    for row=1:n 
      A(row, column) = n + column - 1; 
    end 
end 

가보십시오. 모든 반복마다 행렬을 동적으로 업데이트하는 것보다 훨씬 효율적이므로 모든 0부터 시작하는 행렬을 먼저 만들고 싶습니다. 특히 매우 큰 매트릭스의 경우. Matlab은 벡터를 열 - 주 순서로 저장하기 때문에 내부 for-loop의 행을 반복하고 싶기 때문에 Matlab은 벡터를 반복 할 때와 마찬가지로이 작업을 수행하기 위해 캐시와 주 메모리간에 계속 이동하지 않아도됩니다. inner for 루프의 열. (여전히 훨씬 적은 빈도로).

1

또 다른 옵션 :

bsxfun(@plus,cumsum(ones(n,1)),[0 1 2]); 
관련 문제