2017-12-07 14 views
0

각 셀은 S1 = [m-by-n] 행렬의 숫자의 [5x1] 셀 배열 인 T1 = [1x5] 셀 배열을 다시 형성해야합니다. 숫자의. 문제는 초기 셀 배열 T1 각 셀에 행 수가 다를 수 있습니다 - 의미 "cell2mat"함수를 사용하려면 사각형 모양의 배열을 의미하지 않습니다.행렬이 다른 열 크기의 셀 배열을 행렬로 바꿈

예 :

T1=[1x5] cell array 
T1{1} T1{2} T1{3} T1{4} T1{5} 
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 함께 모든 컬럼을 추가해야

T2= 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 
21 22 23 24 

하고 [m 바이 N] 배열 (항상 사각형 형상)으로 배열을 바꿀, 이 실시 예에서 S1 = [3x8]

S1= 
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] T1 배열을 바꿀 수 있고, 그 ARRA을 바꿀 생각 y = S1 = [m-by-n].

T3= 
1 
2 
3 
4 
... 
24 

을 그리고

T3= 
1 
6 
11 
16 
21 
2 
... 
24 

어떤 도움을 주시면 감사하겠습니다 좋아하지 : 그러나 내가 위해해야 ​​할 것은 다음과 같은 결과를 얻을 수 있습니다.

+0

지금까지 개발 된 코드를 추가하십시오. – Irreducible

+1

"직사각형"보다 더 구체적인 모양 기준을 제시해야합니다. 왜'3 x 8'이 아닌'4 x 6' 또는'2 x 12'입니까? – excaza

+0

T1을 단순히 바꾸려고 했습니까? 배열을 만들면 항상 첫 번째 차원을 따라 이동하므로 중첩하면 찾고있는 결과를 얻을 수 있습니다. – Richard

답변

1

한 가지 전략은 다음과 같습니다

  1. 패드 NaN와 셀 어레이의 모든 요소가 그들에게 같은 크기
  2. 연결할 패딩 배열
  3. NaN
  4. 모양 변경
  5. 제거를 만들기 위해

이렇게 보일 것입니다 ...

,
% 1. Get maximum size of T elements 
% Pad all elements of T up to maxn values with NaN 
maxn = max(cellfun(@numel, T)); 
Tpadded = cellfun(@(x) [x; NaN(maxn-numel(x))], T, 'uni', 0); 
% 2. Convert to array. 
Tpadded = cat(2, Tpadded{:}); 
% 3. Reshape to be one row and remove NaNs 
Trow = reshape(Tpadded.', 1, []); 
Trow = Trow(~isnan(Trow)); 
% 4. Reshape to desired result 
Tout = reshape(Trow, 8, 3).'; 

결과

Tout = [1 2 3 4 5 6 7 8 
     9 10 11 12 13 14 15 16 
     17 18 19 20 21 22 23 24] 
+0

도움을 주셔서 감사합니다. 그것은 매력처럼 작용했습니다. NANs와 함께 패딩을 조사했지만 2 단계와 3 단계가 누락되었습니다. –