2014-05-23 1 views
2

여러 행렬을 벡터로 효율적으로 연결하고 싶습니다. 그러나 그러한 행렬의 수와 크기는 다양합니다. 두 스택이 AB이고, 각각이 m 개의 행렬로 구성되어 있습니다.루프의 크기 행렬을 여러 개 효율적으로 연결

merged = []; 
for i = 1 : m 
    merged = [merged ; A{i}(:) ; B{i}(:)]; 
end 

어려운 부분은 각 할당을 만들면서 새로운 배열에 이전 배열의 내용을 복사 방지하기 위해 위의 코드를 최적화하는 것입니다 :

나이브 방법은 다음과 같이 될 것이다. 예를 들어, 각 행렬의 요소 수를 계산 한 다음 모든 요소를 ​​저장할 수있는 벡터를 미리 할당 할 수 있습니다. 그래도 벡터 내부에 행렬을 효율적으로 배치하는 방법에 대해서는 확실하지 않습니다.

의견을 보내 주시면 감사하겠습니다.

답변

1

한 가지 가능한 방법 :

merged = cellfun(@(x) x(:), [A(:) B(:)].', 'uni', false); 
merged = vertcat(merged{:}); 
+0

제 생각에 제가 가진 글은 an, http://stackoverflow.com/questions/23826559입니다./클래스의 출력 기능 - matlab에 # 23828623 –

+0

작동 완벽하게, 고마워. – voo

0

A 및 B의 크기에 따라 추적이 될 수 빠른 I 사용

C = {A{:} ; B{:}}; 
merged = vertcat(C{:}); 

(numel 위에 보여주기 시작 (A)> 500)가 테스트 데이터로서 다음

m = 1000; 
A = cell(m,1); 
B = cell(m,1); 
for i=1:m 
    A{i} = round(10*rand(max(round(11*rand),1),1)); 
    B{i} = round(10*rand(max(round(5*rand),1),1)); 
end 
+0

OP가 말했듯이 행렬의 크기가 일반적으로 다르다면 'vertcat'을 사용할 수 없습니다 –