Python Numpy-将很小的数字视为零

我想用Numpy计算奇异矩阵的行列式(行列式为0),当我打印行列式时,行列式显示的数字非常小(几乎为零=-7.09974814699e-30),但自身不为零…

当我尝试使用%s,%d或%f打印行列式时,有时为零,有时为-0,有时为-7.09974814699e-30。

这是代码:

import numpy as np

array = np.arange(16)

array = array.reshape(4, -1)

determinant = np.linalg.det(array)

print("Determinant is %s" % determinant)

print("Determinant is %d" % determinant)

print("Determinant is %f" % determinant)

Determinant is -7.09974814699e-30

Determinant is 0

Determinant is -0.000000

如何使Numpy将-7.09974814699e-30等非常小的数字视为零,并向我显示零。我之前也问过这个问题,如果您看一下矩阵,您会发现它填充了非常小的数字,但不是零,而它应该是一个对角矩阵,对角线上有数字,其他地方为零…

谢谢…

回答:

您可以使用来代替低位数字np.round。但是最好保持浮点运算的准确性。您所要控制的只是带有str.format功能的最终输出的格式。

In [7]: a=rand(12,12)

In [8]: deta=det(a)

#0.0063854296972496311

In [10]: detar=det(a.round(3))

# 0.0063817871557592153

In [12]: '{:.5f}'.format(deta)

Out[12]: '0.00639'

In [13]: '{:.5f}'.format(detar)

Out[13]: '0.00638'

最后一行显示由于较早的优化而导致的错误结果。

以上是 Python Numpy-将很小的数字视为零 的全部内容, 来源链接: utcz.com/qa/404344.html

回到顶部