【问题标题】:Replicate elements of cell 1 to match length of cell 2复制单元格 1 的元素以匹配单元格 2 的长度
【发布时间】:2014-04-22 00:15:00
【问题描述】:

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

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

即例如:

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);

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

任何帮助将不胜感激! 谢谢你和最好的问候。

马克

【问题讨论】:

    标签: matlab cell-array


    【解决方案1】:

    应该这样做:

    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 我有。
    • 太棒了!你让我今天一整天都感觉很好。再次感谢:)!
    猜你喜欢
    • 2021-03-04
    • 2016-10-21
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多