MATLAB - 使用两个不同大小的矩阵的元素矩阵乘法

时间:2017-09-01 14:30:45

标签: 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矩阵:

>> 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的解决方案 不适合我,因为它涉及不同的元素乘法,需要重塑,这是我不想要的。

1 个答案:

答案 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;