我有以下两个数组:
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循环执行此操作?
答案 0 :(得分:1)
<强>代码强>
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维。所以,调试会很困难。bsxfun
的维度越来越慢。答案 1 :(得分:0)
您可以执行操作,稍后再更正:
C = (A-1)./(B-1) .* (A-5)./(B-5) .* (A-4)./(B-4)
C(isinf(C)) = 0;
或
C(B==b) = 0;
可能你需要bsxfun
,我不清楚你想要的输出大小......