【问题标题】:MATLAB equating cell elements to arrayMATLAB 将单元元素等同于数组
【发布时间】:2015-06-16 22:27:12
【问题描述】:

我试图将每个元素等同于一个对应于单元格元素的数组。 为了更准确地解释它,例如

A    = {[1 1 1], [0 0 0 0 0], [1 1],[0 0 0 0 0]};
B    = [0 1 0 0];

所以我想要的是:

A= {[0 0 0],[1 1 1 1 1],[0 0],[0 0 0 0 0]};

for 循环的可能解决方案是:

for ii=1:length(A)
     A{ii}(:)=B(ii);
end

有没有不使用循环的方法?

【问题讨论】:

    标签: matlab cell


    【解决方案1】:

    使用repelemmat2cell

    lens = cellfun(@numel, A);
    
    out = mat2cell(repelem(B,lens).*ones(1,sum(lens)),1,lens)
    

    注意:

    1. cellfun 变相循环播放。但是,这里cellfun 用于 单独找出元素的数量。所以这个可以考虑 几乎矢量化:P
    2. repelem 函数在 R2015a 中引入。你可能无法 在以前的版本中运行它。相反,您可以创建自己的自定义 repelem 函数。参考this answer

    【讨论】:

      【解决方案2】:

      你可以这样做:

      A=cellfun(@(x, y) repmat(y, size(x)), A, num2cell(B), 'uni', 0)
      

      这样做的好处是它可以处理A 中任何大小或维度的矩阵。不假设是向量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多