Добавить ячейки в массив ячеек матриц - PullRequest
0 голосов
/ 02 ноября 2011

Код для создания массивов ячеек, взятый из: Массив матриц в MATLAB [Спасибо, Хосам Али!]

Функция:

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 находит использование {} неожиданной круглой скобки при использовании циклов.

Я бы хотел сохранить формат, указанный выше, для диагонали. Что мне делать?

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Чтобы заполнить диагональные элементы, вам не нужно делать это один за другим. используйте вместо этого функцию EYE .

c1 = 1;
c2 = 0.01;
for i = 1:numel(a)
    a{i} = eye(size(a{i}) * c1 + c2;
end
1 голос
/ 02 ноября 2011

Лучшее, что я вижу, это просто пройтись по всем вашим клеткам:

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

Но зачем использовать ячейки, когда вы можете просто сделать 3D-матрицу?

a = zeros(49,9,9);

a(:,2,2) = something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...