额,这个题目修改了几次,还是显得拗口,还是用一个小例子来说明吧:
两个矩阵:
A=[ 3 4 6
6 5 4
6 8 6
]
B=[ 2.3 5.4 9.1]
目标是要实现:第一行,3,4,6乘以2.3;第二行的6,5,4乘以5.4;第三行的6,8,6乘以9.1。
【方法】由于每行都乘以不同的数,所以呢并不能简单的A*B,首先需要对B进行一下处理,即用repmat函数,MATLAB中给出的解释如下:
repmat - Replicate and tile array
This MATLAB function returns an n-by-n tiling of A.
B = repmat(A,n)
B = repmat(A,sz1,sz2,...,szN)
B = repmat(A,sz)
函数的用途,就是可以把一个现有的矩阵进行扩展,帮助中有许多例子,拿一个最好理解的来看:
对于我们的例子呢,要做的就是先将B,这个一行三列的行向量进行扩展:
B=repmat(B',1,3);
B =
2.3000 2.3000 2.3000
5.4000 5.4000 5.4000
9.1000 9.1000 9.1000
解释一下上面这句的意思,repmat(B',1,3); 就是将原来的一行三列向量变成三行一列向量后,横向不复制,竖向复制三次,就变成三行三列的矩阵了
然后呢,
C=A.*B
进行A与更新后的B点乘即可实现咱们最开始要达到的目的了
C =
6.9000 9.2000 13.8000
32.4000 27.0000 21.6000
54.6000 72.8000 54.6000
错了吧,应该是 C = A*B 吧,
@mm 没错的,计算结果刚好就是想要达到的目标