2014-04-22 1 views
0

고급 검색에서이 질문에 대한 답변을 찾으려고했지만 찾을 수 없습니다. 나는 그것을 놓친 것일 수도있다. 어떤 경우에는 사과한다.셀 1의 요소를 셀 2의 길이와 일치하도록 복제

간단한 질문이지만 문제를 해결하는 데 어려움이 있습니다. 각 셀에 double 배열이 포함 된 셀 배열이 있습니다. 우선 배열 길이가 가장 긴 셀을 알아야합니다. 이것이 알려지면 다른 셀의 배열 요소를 복제하여 가장 긴 셀의 길이와 일치시켜야합니다. 예를 들면,

:

RESP = I는 선험적 몰라

{[1 3 2 6 4] [4 2~5]} 여부 RESP {1} 또는 RESP {2 }는 더 큽니다.

내가 원하는 출력은 새로운 셀 배열 resp_new = {[1 3 2 6 4] [4 2 5 4 5]}입니다. 즉, resp {2}에 resp {1}의 길이를 일치시키기 위해 자체 요소 (임의로)를 추가하는 것입니다.

지금까지 내가 요약 할 수 있습니다 무엇을 다음과 같이

Responses = {[1 3 2 6 4] [4 2 5]}; 

% I could have something like this for finding the longest array of doubles in my cell array: 
val=cellfun(@(x) numel(x),Responses); 
longest=Responses(val==max(val)); 

% or something like this, returning only the lengths. 
tmp = cellfun(@length,Responses); 

내가 가진 문제를, 나는 일치하도록 짧은 배열에 자신의 요소를 복제 진행하는 방법을 많이 알고하지 않습니다 두 번째 길이.

도움이 될 것입니다. 감사합니다.

마크

답변

0

을해야한다고 :

Responses = {[1 3 2 6 4] [4 2 5]} 

sizeLongest = max(cellfun(@numel, Responses)); 
Responses = cellfun(@(x) [x x(randi(numel(x), 1, sizeLongest - numel(x)))], Responses, 'UniformOutput', false); 

첫째, 가장 긴 시퀀스의 크기를합니다. 그런 다음 cellfun을 사용하고 각 배열 x에 대해 N 임의 요소를 연결합니다. 여기서 N = sizeLongest - numel(x)입니다.

결과 :

>> Responses{:} 
ans = 

    1  3  2  6  4 


ans = 

    4  2  5  5  2 
+0

우수함, 슈퍼 빠른 아주 대단히 감사합니다. 게다가 그것은 내가 필요한 것입니다. Marc –

+0

너무 빠름 ... 죄송합니다. 아직 수정이 필요합니다. 먼저 내 matlab 버전은 오래되었고 randperm (n, k)를 지원하지 않지만 randperm (n) 만 지원합니다 ... 또한 N <= numel (x) 인 경우에만 작동합니다. 내 경우에 이것은 대부분의 경우 사실이 아닐 것입니다. 어떤 생각을 고칠 수 있을까요? 시간 내 주셔서 감사합니다! –

+0

네가 맞다.'N> numel (x)'이면 작동하지 않을 것이다. Matlab에'랜디 '가 있습니까? –