我有一个矩阵,其中一些元素变为零。在后续操作(记录日志等)中,这对我来说是一个问题。有没有办法用我选择的输入快速替换矩阵中的零元素。快速 - 意思是,没有循环。
问问题
4959 次
3 回答
5
直接的答案是:
M(M == 0) = realmin;
这完全符合您的要求,用一个小数字替换零。看到这以向量化的方式隐式搜索零。不需要循环。(这是一种 MATLAB 方式,避免了那些显式且缓慢的循环。)
或者,您可以使用 max,因为负数从来都不是问题。所以
M = max(M,realmin);
也将工作。同样,这是一个矢量化解决方案。如果没有仔细测试,我不能肯定哪个更快,但肯定可以接受。
请注意,我在这里使用了 realmin 而不是 eps,因为它在双精度数字中尽可能小。但是使用对您有意义的任何小数字。
log10(realmin)
ans =
-307.6527
将其与 eps 进行比较。
log10(eps)
ans =
-15.6536
于 2013-06-05T18:16:17.633 回答
4
当然 - 其中 A 是你的矩阵,
A(A==0) = my_small_number;
于 2013-06-05T18:07:37.600 回答
3
假设你的矩阵被称为A
A(A==0) = eps;
于 2013-06-05T18:07:50.183 回答