复制单元格1的元素以匹配单元格2的长度

时间:2014-04-22 00:15:00

标签: matlab cell-array

我试图在高级搜索中找到这个问题的答案但找不到答案。我可能错过了,在这种情况下,道歉。

我想这是一个简单的问题,但我无法修复它。我有一个单元格数组,每个单元格包含一个双精度数组。首先,我需要知道哪个单元具有最长的数组长度。一旦知道了,就需要复制其他单元格的数组元素以匹配最长单元格的长度。

即,例如:

resp = {[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);

我遇到的问题,我不知道如何继续在最短的数组中复制自己的元素以匹配第二个数组的长度。

任何帮助将不胜感激! 谢谢你,并致以最诚挚的问候。

马克

1 个答案:

答案 0 :(得分: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