How to add more than two elements of a cell, where each element in the cell is a matrix of identicle size?
1 次查看(过去 30 天)
显示 更早的评论
Hi,
A cell contains N elements, where each element is a square matrix, M1, M2, ...., MN of identicle size (say2x2). To add all matrices i.e., M1+M2+...+MN, I tried to use
"plus(M{1,:})", but works well only when the cell contains only two matrices; else it showed following error
Error using +
Too many input arguments.
The sample Matlab code to add 4 matrices of size 2x2 is show below:
M1 = [1 2; 3 4]
M2 = [2 1; 4 3]
M3 = [2 3; 5 2]
M4 = [1 3; 3 5]
M = cell(1,4);
M{1,1} = M1
M{1,2} = M2
M{1,3} = M3
M{1,4} = M4
S = plus(M{1,:})
The error upon the execution is as follows:
Error using +
Too many input arguments.
Error in celle_add_eg (line 13)
S = plus(M{1,:})
Can anyone kindly suggest the possible solution to this error?
Thanks in advance!!
0 个评论
采纳的回答
Shane L
2019-2-26
Try this:
sum(cat(3, M{:}), 3)
This first concatenates all of the arrays in the cells of M into a three-dimensional numeric array, and then it sums the numeric array along the third dimension.
3 个评论
Shane L
2019-2-26
Unfortunately, I don't have access to the symbolic toolbox, so I was unable to test this solution for symbolic variables. However, I think you have two options:
- The simplest option is likely to write a for-loop over the number of cells in M and add each matrix within the loop. This would be the most clear to a reader of the code, too. However, this may take some time if M is very large.
- If you want to be able to take the sum in one line, here is a way to do it with only 2-D matrices:
reshape(sum(reshape(cat(2,M{:}),[],length(M)),2),size(M{1}))
This concatenates the matrices together in the second dimension, reshapes them in a 2-D array that can be summed over the second dimension, and then reshapes the result back to your original array size. Caveat: I have not been able to test this for symbolic variables. Does this work for you?
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!