我有一个函数,它接受两个数组并返回一个名为mad
的标量,我有两个矩阵4-D,其中M(:,:,i,j)
代表一个块矩阵中的一个块,我想应用{{ 1}}在mad
和M1(:,:,i,j)
的每个组合上,让我们进一步解释,我希望代码与此相当:
M2(:,:,k,l)
arrayfun(@(i,j,k,l) mad(M1(:,:,i,j),M2(:,:,k,l)),1:size(M1,1),1:size(M1,2),1:size(M2,1),1:size(M2,2));
会起作用,但它比MATLAB中的arrayfun
慢,甚至更慢,我希望矢量代码不是for-loop。
我是matlab的初学者,我知道for-loop
但是这个函数只使用两个参数的函数,虽然mad只有两个参数,显然bsxfun
有四个。
有一个问题正是我的问题this,但答案不起作用,因为OP有单元矩阵,我已经设法获得4-D矩阵(也就是矩阵矩阵)所以我认为我必须有一个比meshgrid更好的解决方案,因为我的数据会很大(图像数据更具体),所以meshgrid对我不起作用。
最后一件事,我想过使用这样的语法:
@(i,j,k,l)
尝试过,没有用,我得到了
索引A(I)2超出界限1.
那该怎么办?
bsxfun(@(i,j) mad(M1(i(1),1(2)),M2(j(1),j(2))),[1:size(M1,1) 1:size(M1,2)],[1:size(M2,1) 1:size(M2,2)]);
和M1(:,:,i,j)
的大小相同M2(:,:,k,l)
(又名i,j,k,l
但size(M1(:,:,i,j))==size(M2(:,:,k,l))
不必等于size(M1)
)
size(M2)
函数只执行mad
。
答案 0 :(得分:0)