我有一个矩阵,其中一些元素变成了零。这对我后续的操作(如取对数等)造成了问题。有没有一种快速替换矩阵中零元素为我选择的输入的方法。快速-意味着不需要循环。
我有一个矩阵,其中一些元素变成了零。这对我后续的操作(如取对数等)造成了问题。有没有一种快速替换矩阵中零元素为我选择的输入的方法。快速-意味着不需要循环。
M(M == 0) = realmin;
这段代码会根据你的要求,将0替换为一个较小的数字。注意,这个方法是向量化的,无需循环即可隐式地搜索0。(这是MATLAB的一种方式,避免了显式和缓慢的循环)
另外,你也可以使用max函数,因为负数永远不会成为问题。所以:
M = max(M,realmin);
这个方法同样适用。再次强调,这是一个向量化的解决方案。我不能确定哪个更快,需要进行仔细的测试,但两者都肯定可行。
请注意,我在这里使用了realmin而不是eps,因为它是双精度数字中可以实现的最小值。但是请使用任何您认为合理的小数字。
log10(realmin)
ans =
-307.6527
log10(eps)
ans =
-15.6536
A(A==0) = my_small_number;
A
。A(A==0) = eps;
-realmax
和-Inf
要小得多。 :-) - horchler