Arn*_*rez 1 matlab vectorization logical-operators
我有一个元素数组和另外两个数组
我正在做这样的事情:
a=[1 3 2 45 4 23 16];
b=[3 9 1 27 33 50 5];
m=10;
k=linspace(min(a),max(a),m);
res=zeros(m,1);
for i=1:m
res(i) = sum((a < k(i)).*(b < k(i)));
end
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有循环的情况下获得相同的结果?
要删除循环,您可以使用bsxfun,保留脚本的其余部分:
res = sum(bsxfun(@lt,a',k).*bsxfun(@lt,b',k),1).';
Run Code Online (Sandbox Code Playgroud)
基本上,它将运算符应用于少于向量对(a,k)和(b,k); 转置保证您将列向量与第一行进行比较,从而得到矩阵结果.点积的减少是沿指定方向(行方向)进行的.我将结果转置为与您的大小相同,但不是强制性的.