我必须乘以具有不同大小的2个矩阵(标量乘法)。例如,第一个的大小 n -by- m ,第二个 n + 1 -by- m + 1 。事实是情况并非总是如此。我的意思是,有时第一个的大小 n + 1 -by- m + 1 而第二个 n -by- m < / em>或 n + 2 -by- m + 2 等......
示例:
a = [ 1 2 3;
4 5 6];
b = [ 1 2 3;
4 5 6;
7 8 9]
我希望Matlab检查每个矩阵的大小,然后使用2之间可用的最小大小乘以它们,即忽略较大矩阵的最后一行和一列(或类似地,添加{{1}的行和列}到较小的矩阵)。
通过示例输入,我想获得:
0
或
c = [1 4 9;
16 25 36]
我怎么写这个?
答案 0 :(得分:4)
查找最终矩阵的行数和列数:
n = min(size(a,1), size(b,1));
m = min(size(a,2), size(b,2));
然后仅提取a
和b
的相关部分(使用:
运算符)进行乘法运算:
c = a(1:n,1:m).*b(1:n,1:m)
答案 1 :(得分:1)
如果您只考虑点积,则意味着大小(a)必须等于大小(b),这样可以简单地限制b的大小,如果您愿意,可以使用简单的if语句。例如:
if all(size(b) == size(a))
answer = a.*b
else
minsize(:,1) = min(size(a,1),size(b,1));
minsize(:,2) = min(size(a,2),size(b,2));
answer = a(1:minsize(:,1),1:minsize(:,2)).*a(1:minsize(:,1),1:minsize(:,2));
end
我不认为这是最简单的方法,但理解起来很简单:)
答案 2 :(得分:0)
我并不总是确定哪个矩阵更大,然后我想使用:
const JPG = "image/jpeg";
module.exports = {
JPG: JPG
}
这似乎是这样的。