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 表达式?
谢谢大家~~
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)
这也是完全矢量化的。
| 归档时间: |
|
| 查看次数: |
2925 次 |
| 最近记录: |