Matlab 中的逐元素 if - 它们存在吗?
假设我有以下基本 if 语句:
if (A ~= 0)
% do something like divide your favorite number by A
else
% do something like return NaN or infinity
end
问题是 A 不是一个简单的数字,而是一个向量。 如果 A 中没有元素为 0,Matlab 返回 true。我正在寻找的是矢量化的? 为 A 中的每个元素执行上面的 if 语句的方法。
实际上,我只是想尽快执行此操作。
Say I have the following basic if-statement:
if (A ~= 0)
% do something like divide your favorite number by A
else
% do something like return NaN or infinity
end
The problem is that A is not a simple number but a vector. Matlab returns true if no element in A is 0. What I am looking for is a vectorized? way of perforimg the if-statement above for each element in A.
Actually, I simply want to do this as fast as possible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
向量化 if 不存在,但有一些选项。 如果要测试所有或任何元素是否为 true,请使用 all 或 any 函数。
以下是有条件地修改矩阵值的一个示例:
Vectorized ifs don't exist, but there are some options. If you want to test for all or any elements true, use the all or any function.
Here's one example of conditionally modifying values of a matrix:
一般来说,要对矩阵的某些元素执行一项操作,而对其余元素执行另一项操作,一行解决方案是:
其中 B 是逻辑矩阵。 例如,
复制 A,但在 A 为零的地方分配 -1。
然而,因为这个问题涉及无穷大或 NaN,所以可以更简洁地完成:
In general, to perform one operation on some elements of a matrix and another operation on the remaining elements, a one-line solution is:
where B is a logical matrix. As an example,
copies A but assigns -1 everywhere that A is zero.
However, because the question deals with infinity or NaNs, it can be done even more succinctly:
您是否正在寻找所有非零元素? 您可以通过几种方式做到这一点。
或者对于单行语句,您可以使用条件代替索引
Are you looking for all non-zero elements? You can do this a couple of ways.
Or for a one-liner, you can use a conditional in place of indicies
您需要做的是确定要操作的元素。 我会使用“查找”。 我将结果存储在 VI(有效索引)中,并使用它来填充矩阵。
What you need to do is identify the elements you want to operate on. I would use FIND. I store the results in VI (Valid Indicies) and use that to populate the matrix.