【问题标题】:how to append inside cells in a cell array without looping?如何在不循环的情况下附加单元格数组中的单元格?
【发布时间】:2017-05-12 14:11:42
【问题描述】:

我有一个数组

A={1 6 31 65; 1 38 53 4};

我想要一个单元格数组

C={[1 1] [6 6] [31 31] [65 65];[1 1] [38 38] [53 53] [4 4]}; 

这样做的一种方法是循环:

for count=1:2
    for i=1:4
        for j=1:2
            C{i,j}(count)=A(i,j);
        end
    end
end

如何在不循环的情况下做到这一点并提高时间复杂度?

编辑:不是 count=2 的情况,我的应用程序计数高达 85。循环大大降低了效率。并且寻求更高维度的矩阵也是低效的。

【问题讨论】:

  • 你没有。为什么需要元胞数组?单元格包含大小相同的数组。

标签: matlab performance cell-array


【解决方案1】:

一种方法是使用cellfun 创建每个新元素

C = cellfun(@(x)ones(1,2) * x, A, 'UniformOutput', false);

正如@excaza 指出的那样,您拥有大小相等的数据,因此建议您改用多维数组。您可以(例如)只是沿第三维复制数据

C = repmat(A, [1 1 2]);

【讨论】:

  • 请注意,在不支持 character function input 的情况下,cellfun 可能会比显式循环慢。
  • @excaza 在这种情况下,虽然它可能会更快,因为在问题的示例中没有预先分配每个单元数组元素。
猜你喜欢
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多