首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在有约束时省略for循环

如何在有约束时省略for循环
EN

Stack Overflow用户
提问于 2014-04-16 14:52:22
回答 2查看 40关注 0票数 0

我有以下两个数组:

代码语言:javascript
复制
A = [1 2;3 4] and B = [1 5 4]

我想做以下操作:

代码语言:javascript
复制
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循环?

EN

回答 2

Stack Overflow用户

发布于 2014-04-16 15:03:04

代码

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
A1 =

         0   -0.2500
   -0.1111         0

您可以删除嵌套循环,但至少有两个问题-

,,

  1. ,你可以使用bsxfun,进入4维和5维。因此,据我所知,更高维度的tough.
  2. bsxfun调试似乎变得更慢了。
票数 1
EN

Stack Overflow用户

发布于 2014-04-16 14:58:29

你可以只做这个操作,然后改正:

代码语言:javascript
复制
C = (A-1)./(B-1) .* (A-5)./(B-5) .* (A-4)./(B-4)
C(isinf(C)) = 0;

代码语言:javascript
复制
C(B==b) = 0;

你可能需要bsxfun,我不清楚你想要的输出的大小...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23102086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档