Добавление трех или более матриц в одну команду - PullRequest
0 голосов
/ 25 мая 2018

Например, в Octave я могу сделать следующее:

A = randn(2);
B = randn(2);
C = randn(2);
plus(A, B, C)

Однако это не работает в MATLAB, поскольку функция плюс в MATLAB допускает только два входных аргумента.

ДляВ контексте у меня есть массив ячеек, полный больших разреженных матриц, и мне нужно сложить их все вместе.Я ищу эффективный способ сделать это.Например, в Octave я сделал бы следующее:

D = {A, B, C};
plus(D{:})

Но это не работает в MATLAB по причине, описанной выше.

1 Ответ

0 голосов
/ 25 мая 2018

Если все матрицы в массиве ячеек имеют одинаковый размер, тогда вы можете объединить каждый из них в отдельный фрагмент трехмерного массива и затем sum по 3-му измерению, т.е.

sum(cat(3,D{:}),3)

Это недопустимо, если ваш массив ячеек представляет собой комбинацию скаляров и матриц, или если вы делаете неявное расширение с помощью plus.


Если массив ячеекимеет комбинацию матриц разного размера, тогда просто используйте цикл.Петли были значительно улучшены в более новых версиях MATLAB.

req = 0;
for k = 1:numel(D)
    req = req + D{k}; %or bsxfun(@plus, req, D{k}) for < R2016b
end
...