Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB-使用两种不同大小矩阵的元素矩阵乘法_Arrays_Matlab_Matrix - Fatal编程技术网

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

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

我想在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中使用一个大矩阵和另一个小矩阵进行元素矩阵乘法

编辑:解决方案 这对我不起作用,因为它涉及到不同的元素级乘法,需要重塑,这是我不想要的

假设您的原始帧和过滤器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;