我有一个向量 x = [1 2 3]
和一个由 N x N 矩阵组成的 3 x 3 元胞数组 C
。例如。 C{1,1}
是一个 N × N 矩阵。
我想将 x
和 C
相乘,得到大小为 1 乘以 3 的元胞数组 D
:
D{1,1} = x(1)C{1,1) + x(2)C{2,1} + x(3)C{3,1}
D{1,2} = x(1)C{1,2) + x(2)C{2,2} + x(3)C{3,2}
D{1,3} = x(1)C{1,3) + x(2)C{2,3} + x(3)C{3,3}
最佳答案
没有展开的循环
对于长度为 M=3
的向量 x
和一个 M-by-M
元胞数组 C
,这个想法是形成一个M*N-by-M
矩阵,其中列i
由单元格C{i, :
。然后,您可以使用 x.'
的矩阵乘法来获取 D
中的值,并使用 mat2cell
将结果分解为新的元胞数组.
Ct = C';
Dvals = reshape([Ct{:}],[],M)*x.';
D = mat2cell(reshape(Dvals,N,[]),N,N*ones(M,1))
测试数据:
N = 4; M = 3; x = 1:M;
C = mat2cell(rand(N*M,N*M),N*ones(M,1),N*ones(M,1));
注意:这要求每个子矩阵的大小与问题中的相同。
关于Matlab 向量乘以元胞数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20112231/