Matlab 复制单元1的元素以匹配单元2的长度
我试图在高级搜索中找到这个问题的答案,但没有找到。我可能错过了,在这种情况下,道歉 我想这是一个简单的问题,但我很难解决它。我有一个单元格数组,每个单元格包含一个双精度数组。首先,我需要知道哪个单元的数组长度最长。一旦知道这一点,就需要复制其他单元的数组元素,以匹配最长单元的长度 例如: resp={[1 3 2 6 4][4 2 5]} 我不知道resp{1}或resp{2}是否更大 我想要的输出是一个新的单元数组resp_new={[1 3 2 6 4][4 2 5]}。 也就是说,在resp{2}中添加自己的元素(可能是随机的),以匹配resp{1}的长度 到目前为止,我得到的总结如下:Matlab 复制单元1的元素以匹配单元2的长度,matlab,cell-array,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]}。 也就是说,在res
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);
我的问题是,我不知道如何在最短的数组中复制自己的元素,以匹配第二个数组的长度
任何帮助都将不胜感激!
谢谢你,并致以最良好的问候
Marc应该这样做:
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
太好了,非常非常感谢,非常快。另外,这正是我需要的。太快了…对不起,还需要修理。首先,我的matlab版本比较旧,不支持randperm(n,k),但只支持randperm(n)…而且,只有在n正确的情况下它才会工作,如果
n>numel(x)
,它就不会工作。你的Matlab上有randi
吗?啊,是的,randi
我有。太棒了!你让我开心。再次感谢:)!