【问题标题】:Vectorize MATLAB if loop向量化 MATLAB if 循环
【发布时间】:2017-04-22 23:12:39
【问题描述】:

有很多与此相关的问题,但我找不到完全相关的问题。如果满足if 条件,我需要进行一些计算。 这是没有矢量化的代码:

if check(w,t)~=1
 do all this
end

w 和 t 在这个 if 之外有一个循环,我需要对 w 进行矢量化。所以,我想要类似的东西

if check(:,t)~=1
do all this (only for those w for which the condition was satisfied)
end

我该怎么做?

【问题讨论】:

    标签: matlab loops vectorization


    【解决方案1】:

    您问题的最佳答案很大程度上取决于满足check(w,t)~=1 或if check(:,t)~=1 条件时您想做什么。

    不过,您可以使用函数find 来查找矩阵check 上的元素的索引,在您的情况下为~= 1:

    [r_no_1,c_no_1]=find(ckeck ~= 1)
    

    如果需要按列工作,可以这样使用find:

    for col=1:size(ckeck,2)
       ck_no_1=find(ckeck(:,col) ~= 1)
       m=ckeck(ck_no_1,col)*100
    end
    

    现在,在每次迭代中,ch_no_1 包含元素不同于 1 的行索引(第 col 列的)。

    希望这会有所帮助,

    卡普拉'

    【讨论】:

    • 在您给出的示例中无需使用find。删除 find( 和结尾的 ) 会更有效地得到相同的结果。
    • @PhilGoddard 谢谢你的建议,你是对的;尽管如此,由于问题中没有指定在验证条件时要做什么,因此直接使用索引可能比使用逻辑数组更有帮助。
    • 嗯,感谢您的回答,但我知道我可以找到检查为 1、0 的元素的索引。但是在找到这些元素后,我该如何以矢量化方式进行?此外,您的问题是满足条件时会发生什么 - 许多计算、循环、函数调用。
    • 我发布的答案包含一个关于如何使用索引的示例(即使非常简单):它乘以 100 check 矩阵中与 @987654335 不同的值@。如果您需要更复杂的示例,则必须发布您正在处理的代码,以便了解您正在处理的计算、循环、函数调用的类型。
    猜你喜欢
    • 2015-07-06
    • 2013-02-18
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多