【问题标题】:Add cells in cell array of matrices在矩阵元胞数组中添加元胞
【发布时间】:2011-12-20 11:52:06
【问题描述】:

创建元胞数组的代码取自: Array of Matrices in MATLAB [谢谢 Hosam Aly!]

功能是:

function result = createArrays(nArrays, arraySize)
    result = cell(1, nArrays);
    for i = 1 : nArrays
        result{i} = zeros(arraySize);
    end
end

我的代码:

   a=createArrays(49,[9,9]);

    a{1}(1,1) = 0.01 + 1.*rand(1,1);
    a{1}(2,2) = 0.01 + 1.*rand(1,1);
    a{1}(3,3) = 0.01 + 1.*rand(1,1);
    a{1}(4,4) = 0.01 + 1.*rand(1,1);
    a{1}(5,5) = 0.01 + 1.*rand(1,1);
    a{1}(6,6) = 0.01 + 1.*rand(1,1);
    a{1}(7,7) = 0.01 + 1.*rand(1,1);
    a{1}(8,8) = 0.01 + 1.*rand(1,1);
    a{1}(9,9) = 0.01 + 1.*rand(1,1);

我不能使用 a{:}(1,1) 来引用所有矩阵。 Matlab 在使用循环时发现使用 { } 是一个意外的括号。

我想保持上述对角线的格式。我该怎么办?

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    我能看到的最好的事情就是循环遍历你的所有单元格:

    for i = 1:49
     a{i}(1,1) = ...
    end
    

    但既然可以制作 3D 矩阵,为什么还要使用单元格呢?

    a = zeros(49,9,9);
    
    a(:,2,2) = something
    

    【讨论】:

    • 我的其余代码需要将矩阵存储在元胞数组中。您的答案的第一部分有效,谢谢!
    • 好的,但是如果有一天速度成为一个因素,第二种方式会快得多
    【解决方案2】:

    要填充对角线元素,您不必一一进行。请改用EYE 函数。

    c1 = 1;
    c2 = 0.01;
    for i = 1:numel(a)
        a{i} = eye(size(a{i}) * c1 + c2;
    end
    

    【讨论】:

    • 啊,我明白了。只是每个对角元素都是不同方程的结果。不过感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多