我有一个矩阵,其中一些元素为零。这对我来说是一个问题,因为后续操作(记录日志等)。有没有办法用我选择的输入快速替换矩阵中的零元素。快速 - 意义,没有循环。
答案 0 :(得分:5)
直接答案是:
M(M == 0) = realmin;
这正是你要求的,用一个小数字替换零。看到这是以向量化方式隐式搜索零。不需要循环。 (这是一种MATLAB方式,避免那些显式和慢速循环。)
或者,您可以使用max,因为负数永远不会成为问题。所以
M = max(M,realmin);
也会奏效。同样,这是一个矢量化解决方案。如果没有经过仔细的测试,哪一个更快,我不肯定,但要么肯定是可以接受的。
请注意,我在这里使用的是realmin而不是eps,因为它实际上可以使用双精度数字。但是使用任何对你有用的小数字。
log10(realmin)
ans =
-307.6527
将其与eps进行比较。
log10(eps)
ans =
-15.6536
答案 1 :(得分:4)
当然 - A是你的矩阵,
A(A==0) = my_small_number;
答案 2 :(得分:3)
假设您的矩阵被称为A
A(A==0) = eps;