MATLAB - 将矩阵中的零替换为小数

4

我有一个矩阵,其中一些元素变成了零。这对我后续的操作(如取对数等)造成了问题。有没有一种快速替换矩阵中零元素为我选择的输入的方法。快速-意味着不需要循环。

3个回答

5
直接的答案是:
M(M == 0) = realmin;

这段代码会根据你的要求,将0替换为一个较小的数字。注意,这个方法是向量化的,无需循环即可隐式地搜索0。(这是MATLAB的一种方式,避免了显式和缓慢的循环)

另外,你也可以使用max函数,因为负数永远不会成为问题。所以:

M = max(M,realmin);

这个方法同样适用。再次强调,这是一个向量化的解决方案。我不能确定哪个更快,需要进行仔细的测试,但两者都肯定可行。

请注意,我在这里使用了realmin而不是eps,因为它是双精度数字中可以实现的最小值。但是请使用任何您认为合理的小数字。

log10(realmin)
ans =
 -307.6527

与eps相比较。
log10(eps)
ans =
  -15.6536

-realmax-Inf 要小得多。 :-) - horchler

4
当然,假设A是你的矩阵,
A(A==0) = my_small_number;

3
假设你的矩阵被称为A
A(A==0) = eps;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接