我有以下两个数组:
A = [1 2;3 4] and B = [1 5 4]我想做以下操作:
for each element of A(call it A(i))
for each element of B~=b do
( (A(i) - 1)/(b-1) ) * ( (A(i) - 5)/(b-5) ) * ( (A(i)- 4)/(b-4) )
end
end这意味着,有时分子等于零,所以乘积应该是零。我想对B的元素进行操作,这些元素在分母上不等于b,这样就不会让它变成Inf。
我如何才能对整个矩阵A执行此操作,而不是使用for循环?
发布于 2014-04-16 15:03:04
代码
A = [1 2;3 4];
B = [1 5 4];
m1 = bsxfun(@minus,A,permute([1 5 4],[3 1 2]));
m2 = bsxfun(@minus,B,permute([1 5 4],[3 1 2]));
for k1=1:size(A,1)
for k2=1:size(A,2)
t2 = squeeze(bsxfun(@rdivide,m1(k1,k2,:),m2));
t2(1:size(t2,1)+1:end)=1;
A1(k1,k2) = prod(t2(:)); %%// Output
end
end输出
A1 =
0 -0.2500
-0.1111 0您可以删除嵌套循环,但至少有两个问题-
,,
bsxfun,进入4维和5维。因此,据我所知,更高维度的tough.bsxfun调试似乎变得更慢了。发布于 2014-04-16 14:58:29
你可以只做这个操作,然后改正:
C = (A-1)./(B-1) .* (A-5)./(B-5) .* (A-4)./(B-4)
C(isinf(C)) = 0;或
C(B==b) = 0;你可能需要bsxfun,我不清楚你想要的输出的大小...
https://stackoverflow.com/questions/23102086
复制相似问题