在此Matlab矩阵操作中避免for循环

时间:2011-07-20 23:13:40

标签: matlab vectorization

我有一个大的4维矩阵,我希望1)找到这些维度中最小的2个(即4000x4000结果),然后2)计算最后两个维度中小于的元素数量(让我们说)最小值的5倍(即给出4000x4000的结果)。我有点难过如何做到这一点而不回复for循环

某些代码可能有助于我的描述:

A      = rand([4000,4000,7,7]);
B(:,:) = min(A(:,:,1:7;1:7)); % this isn't quite right?
C      = size( A < 5*B ) % obviously totally wrong

任何指针都会很棒 - 非常感谢!

2 个答案:

答案 0 :(得分:2)

如果我理解这一点,以下应该做的工作:

mn = min(min(A,[],3),[],4);
num = sum(sum(bsxfun(@lt, A, 5*mn),3),4)

答案 1 :(得分:-1)

首先,它应该是rand([4000,4000,7,7])

其次,要使用min,你必须做min(A, [], 1)之类的事情(用维度替换1)

第三,假设您有AB,则需要C = sum(sum(A < 5*B))