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