我如何在 Matlab 中执行类似列表理解的操作?

fre*_*ert 5 matlab list-comprehension

我的问题是:如何在类似于 Haskell 或 Python 的 Matlab 中执行类似列表理解的操作?在Matlab中完成如下功能:

for xxx 
    if condition
        expression1;    
    else 
        expression2;
     end 
end 
Run Code Online (Sandbox Code Playgroud)

我最初的目标是利用矢量化操作并减少代码中的 for 循环以使其运行得更快。

编辑:我对答案的期望与 arrayfun 无关,向量化操作方法更受欢迎。

还有另一个与此问题相关的问题(通过名为“arrayfun”的函数)。Matlab 中的匿名函数接缝只有 1 行,那么我如何在其中编写 if-else 表达式?

谢谢大家~~

Dan*_*Dan 1

arrayfun实际上并没有消除循环,它只是意味着您不必显式地输入它们。也就是说,在新的 Matlabs 中循环不再那么慢了。但可能有一种完全矢量化的方式来做你想做的事,我并不是说它一定会更快(但我认为它会在旧的 matlab 中):

您可以利用 Matlab 自动将逻辑转换为双精度的方式,即 false 转换为 0,true 转换为 1。例如

A = rand(10,1);
Run Code Online (Sandbox Code Playgroud)

假设您希望将高于 0.7 的值乘以 2,否则您必须减去 5 然后就可以了

(A*2).*(A>0.7) + (A-5).*(A<=0.7);

当然,在这样一个简单的示例中,您也可以只使用逻辑索引:

I = A > 0.7;
A(I) = A(I)*2;
A(~I) = A(~I) - 5;
Run Code Online (Sandbox Code Playgroud)

这也是完全矢量化的。