【问题标题】:Matlab: Remove IF-ELSE Conditional statements using Logical IndexingMatlab:使用逻辑索引删除 IF-ELSE 条件语句
【发布时间】:2014-06-01 18:32:23
【问题描述】:

如果不使用 if 语句或循环,我无法准确理解如何回答这个问题。

n = input ('What is the vector length? ');
y = rand(n,1);
x = rand(n,1);
p = zeros(n,1);
for i=1:n
    if (y(i) > 0.5 && x(i) < 0.5) || y(i) < 0.2
        p(i) = y(i) + x(i);
    else
        p(i) = (y(i)*x(i))^2
    end
end

a) 重新实现 仅使用向量运算和逻辑索引的代码(即,您 不能使用任何循环或分支)。

【问题讨论】:

    标签: arrays matlab indexing conditional vectorization


    【解决方案1】:

    这样你就不需要初始化p -

    cond1 = (y > 0.5 & x < 0.5) | y < 0.2;
    p = cond1.*(y + x) + ~cond1.*((y.*x).^2)
    

    【讨论】:

    • 我以前从未见过将条件语句定义为变量。这是matlab的标准函数吗?
    • @Thallazar 欢迎来到MATLAB,我应该说吗?是的,这就是 MATLAB 可以达到的高度 :) 严肃地说,是的,这是删除条件语句的技巧之一。 cond1 在这种情况下将条件决策存储为二进制数组,我们将映射到两个数组值,这两个数组值分别是决策为真和假时的值。
    • 是否有它们的名称,以便我了解它们的工作原理?例如,如果您将其定义为带有 y 和 x 的某个条件,它是否仅适用于名为 y 和 x 的变量?
    • 手册中的名称是logical array。您还会在函数find 下找到一些好东西,它将逻辑数组转换为true 元素的索引列表。另请阅读数学章节下关于“矩阵和数组”的整个“用户指南”部分。所有这些东西都很难分类。您只需要熟悉语法即可。
    • 非常感谢你们,你们帮了我很大的忙。
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2014-02-19
    • 2015-10-12
    • 2023-03-20
    • 2022-01-07
    • 2021-10-24
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多