单元格内的条件分割数组

时间:2018-04-09 15:11:06

标签: matlab

假设我有一个50x1的单元格(比如Q),其中包含不同尺寸的列矩阵(比如1568936x1,88x1,5040x1)等 失去价值不是问题。我需要单元格内的所有矩阵可以被所述数字整除(比如500),所以像1568500x1,5000x1跳过88x1等。

目前我有:

z=cell(length(Q),1)

for p=1:length(z)
    n=length(Q{p})
    for w=1:length(z)
        if n-mod(length(Q{w}),500)<500
            w=w+1;
        else
            o=length(Q{w}-mod(length(Q{w}),500));
            for k=1:length(z)
                z=Q{w}((1:o));
            end
        end
    end
end

但是当我到达88x1矩阵时,它会抛出尺寸超出错误,尽管我认为我已经用if条件覆盖了它应该跳过矩阵然后移动到下一个单元格。

1 个答案:

答案 0 :(得分:1)

这应该可以正常工作:

Z

给定起始向量(缩短以避免过度重载),最终输出>> cellfun(@numel,Z) ans = 50 150 0 150 100 为:

Q = {
   rand(58,1);
   rand(168,1);
   rand(33,1);
   rand(199,1);
   rand(100,1)
};

K = 50;
Z = cellfun(@(x)x(1:(floor(numel(x)/K)*K)),Q,'UniformOutput',false);

如果你想要一个较短的单行版本,这里有一个:

{{1}}