我在Matlab代码中看到了很多次等价运算,我想,一定有一种方法可以压缩这些运算,然后一次完成。在这个例子中,它检查了一些变量是否小于某个epsilon:
if abs(beta) < tol
beta = 0;
end
if abs(alpha) < tol
alpha = 0;
end
if abs(gamma) < tol
gamma = 0;
end
我试着把这些组合成几行来处理整个战利品,
overTol = [alpha,beta,gamma] >= tol;
[alpha,beta,gamma] = [alpha,beta,gamma] .* overTol;
如果这是Python,列表就是列表就是列表,这没问题,但在Matlab中,右边的操作会在左边产生一个变量,除非特殊情况。
在阅读Define multiple variables at the same time in MATLAB?和Declare & initialize variables in one line in MATLAB without using an array or vector之后,我尝试使用deal
,但是[alpha,beta,gamma] = deal([alpha,beta,gamma] .* overTol);
并没有在左边的向量项之间分配给deal函数的向量项,而是将整个向量的副本分配给每个项。
我最不想做的就是把右向量设为一个唯一的向量,然后把α,β,γ,一个接一个地设为这个向量的项,这和我刚开始做的一样难看。
有没有一个优雅的解决方案?
2条答案
按热度按时间lvmkulzt1#
好吧,评论解释了为什么可能有更好的方法。我很好奇,如果它可以做到。它可以,但也许它不应该。
ncgqoxb02#
您可以使用
cellfun
生成结果的单元格数组,并使用deal
将其重新分配回变量一个更易读(和维护友好)的方法可能是只使用函数,并接受它将使用更多的行。