如果我有一个包含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是一个单元格?
答案 0 :(得分:1)
您可以使用cellfun
分别对A
中的每个元素进行操作,并使用bsxfun
将A
中矩阵中的每一行乘以{{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