Arrays MATLAB-使用两种不同大小矩阵的元素矩阵乘法
我想在MATLAB中使用以下2x2x3矩阵进行元素矩阵乘法Arrays MATLAB-使用两种不同大小矩阵的元素矩阵乘法,arrays,matlab,matrix,Arrays,Matlab,Matrix,我想在MATLAB中使用以下2x2x3矩阵进行元素矩阵乘法 >> filter_1 filter_1(:,:,1) = 0 1 0 0 filter_1(:,:,2) = 1 0 0 1 filter_1(:,:,3) = 0 0 1 0 如果在元素相乘中使用,该矩阵在某些矩阵维度中的某些元素将变为零。例如,给定另一个2x2x3矩阵: >> fra
>> filter_1
filter_1(:,:,1) =
0 1
0 0
filter_1(:,:,2) =
1 0
0 1
filter_1(:,:,3) =
0 0
1 0
如果在元素相乘中使用,该矩阵在某些矩阵维度中的某些元素将变为零。例如,给定另一个2x2x3矩阵:
>> frames_original{1}
ans(:,:,1) =
92 87
93 93
ans(:,:,2) =
69 66
72 71
ans(:,:,3) =
42 40
40 43
如果我进行元素矩阵乘法,它将使一些值保留在结果矩阵中,其他值将变为零:
>> filtered=double(frames_original{1}).*filter_1
filtered(:,:,1) =
0 87
0 0
filtered(:,:,2) =
69 0
0 71
filtered(:,:,3) =
0 0
40 0
但是,这仅在两个矩阵大小相同(2x2x3)时有效。现在,假设我有一个大矩阵,比如1500x1500x3矩阵。如何“滑动”我的2x2x3窗口,执行相应的矩阵边界的元素乘法?如果使用N-D卷积,它将不起作用,因为MATLAB将此操作作为偶数维窗口卷积处理,而我想要的是元素级乘法
有没有办法在MATLAB中使用一个大矩阵和另一个小矩阵进行元素矩阵乘法
编辑:解决方案
这对我不起作用,因为它涉及到不同的元素级乘法,需要重塑,这是我不想要的 假设您的原始帧和过滤器1仅在前两个维度上不同,我们可以复制过滤器1以匹配原始帧的大小
假设您的原始帧和过滤器仅在前两个维度不同,我们可以复制过滤器以匹配原始帧的大小
filter_1=repmat(filter_1[750 1]);这就是你想要的吗?没错!你做到了!非常感谢。你能回答我的问题吗?但是,是否可以在您的repmat中包含我不知道较大矩阵的大小这一事实(它可以是任何大小)?filter_1=repmat(filter_1,[750 1]);这就是你想要的吗?没错!你做到了!非常感谢。你能回答我的问题吗?但是,是否可以在您的报告中包括我不知道我的较大矩阵的大小这一事实(它可以是任何大小)?谢谢。如果较大矩阵的维数为奇数,是否不可能执行您建议的相同操作?然后您可以使用类似m1=floor(大小(frames_original,1)/size(filter_1,1));并添加一行和一列以过滤_2,以匹配较大矩阵的大小。您需要调用添加1或0。您可以四舍五入(使用
ceil
),然后如图所示重新填充,然后通过丢弃多余的元素来修剪过滤器filter2=filter2(1:size(frames_original{1},1),1:size(frames_original{1},2))
谢谢。如果较大矩阵的维数为奇数,是否不可能执行您建议的相同操作?然后您可以使用类似m1=floor(大小(frames_original,1)/size(filter_1,1));并添加一行和一列以过滤_2,以匹配较大矩阵的大小。您需要调用添加1或0。您可以进行取整(使用ceil
),然后如图所示重新填充,然后通过丢弃多余的元素来修剪过滤器filter2=filter2(1:size(frames_original{1},1),1:size(frames_original{1},2))
m1 = size(frames_original, 1) / size(filter_1, 1);
m2 = size(frames_original, 2) / size(filter_1, 2);
filter_2 = repmat(filter_1, [m1 m2 1]; % error if m1 m2 not integer
filtered = double(frames_original{1}) .* filter_2;