如何乘以不同大小的矩阵(不知道它们的确切大小)?
How to multiply matrix having different size (without knowing exactly the size they will have)?
我必须将 2 个大小不同的矩阵相乘(标量乘法)。例如,第一个的大小为 n-by-m,第二个的大小为 n+1-by -m+1。事实并非总是如此。我的意思是,有时第一个的大小为 n+1-by-m+1 而第二个的大小为 n-by-m 或 n+2-by-m+2 等等...
示例:
a = [ 1 2 3;
4 5 6];
b = [ 1 2 3;
4 5 6;
7 8 9]
我希望 Matlab 检查每个矩阵的大小,然后使用 2 之间可用的最小大小将它们相乘,即忽略较大矩阵的最后一行和最后一列(或者类似地,添加 [= 的行和列13=] 到较小的矩阵)。
通过示例输入我想获得:
c = [1 4 9;
16 25 36]
或
c = [1 4 9;
16 25 36;
0 0 0]
这个怎么写?
求出最终矩阵的行数和列数:
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)
如果只考虑点积,意味着size(a)必须等于size(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
我认为这不是最简单的方法,但它很容易理解:)
我总是不确定哪个矩阵更大,然后我想使用:
if size (a) > size (b)
a = a(1:size(b,1),1:size(b,2));
elseif size (a) < size (b)
b = b (1: size (a,1),1:size(a,2));
end
好像是这样的
我必须将 2 个大小不同的矩阵相乘(标量乘法)。例如,第一个的大小为 n-by-m,第二个的大小为 n+1-by -m+1。事实并非总是如此。我的意思是,有时第一个的大小为 n+1-by-m+1 而第二个的大小为 n-by-m 或 n+2-by-m+2 等等...
示例:
a = [ 1 2 3;
4 5 6];
b = [ 1 2 3;
4 5 6;
7 8 9]
我希望 Matlab 检查每个矩阵的大小,然后使用 2 之间可用的最小大小将它们相乘,即忽略较大矩阵的最后一行和最后一列(或者类似地,添加 [= 的行和列13=] 到较小的矩阵)。
通过示例输入我想获得:
c = [1 4 9;
16 25 36]
或
c = [1 4 9;
16 25 36;
0 0 0]
这个怎么写?
求出最终矩阵的行数和列数:
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)
如果只考虑点积,意味着size(a)必须等于size(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
我认为这不是最简单的方法,但它很容易理解:)
我总是不确定哪个矩阵更大,然后我想使用:
if size (a) > size (b)
a = a(1:size(b,1),1:size(b,2));
elseif size (a) < size (b)
b = b (1: size (a,1),1:size(a,2));
end
好像是这样的