我想在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矩阵:
>> 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中使用一个大矩阵和另一个较小的矩阵进行逐元素矩阵乘法?
编辑:Element wise multiplication of matrices of differing dimensions的解决方案 不适合我,因为它涉及不同的元素乘法,需要重塑,这是我不想要的。
答案 0 :(得分:2)
假设您的 frames_original 和 filter_1 仅在前两个维度上有所不同,我们可以复制 filter_1 以匹配 frames_original <的大小/ em>的
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;