在matlab中将单元格元素与向量相乘

时间:2017-01-18 21:27:56

标签: matlab cell

如果我有一个包含2个矩阵的单元格:

A = {[10  0  0 10  0 20 15;
       0 10 10 15  0  0 20;
      10  0  0 12 11  0  0;
      10  0  0  0 19  0 14;
      18 13  0  0  0 15  0;
       0 10  0  0  0 10 15] 
     [ 0  0 10  0 20 15;
      10 10 15  0  0 20;
       0  0 12 11  0  0;
       0  0  0 19  0 14;
      13  0  0  0 15  0;
      11  0 13  0 15  0]}

B = [500 550 600 650 700 550]

我希望将每个矩阵与此向量相乘,方式是A的第1行乘以B的第1个元素,A的第2行与B的第2个元素,......和第6行的A与B 的第6个元素。如何定义这个,因为A是一个单元格?

1 个答案:

答案 0 :(得分:1)

您可以使用cellfun分别对A中的每个元素进行操作,并使用bsxfunA中矩阵中的每一行乘以{{1}中的一个元素}}:

B

结果:

celltimes = @(A) bsxfun(@times,A,B.');
C = cellfun(celltimes,A,'UniformOutput',false)

正如@Adriaan在评论中指出的那样,在Matlab 2016b中>> celldisp(C) C{1} = Columns 1 through 4 5000 0 0 5000 0 5500 5500 8250 6000 0 0 7200 6500 0 0 0 12600 9100 0 0 0 5500 0 0 Columns 5 through 7 0 10000 7500 0 0 11000 6600 0 0 12350 0 9100 0 10500 0 0 5500 8250 C{2} = Columns 1 through 4 0 0 5000 0 5500 5500 8250 0 0 0 7200 6600 0 0 0 12350 9100 0 0 0 6050 0 7150 0 Columns 5 through 6 10000 7500 0 11000 0 0 0 9100 10500 0 8250 0 被隐式实现,所以你可以写:

bsxfun