Python中更多小数位

时间:2014-09-07 13:28:40

标签: python-2.7 floating-point decimal

这是我的python代码:

import math

import decimal as dec

import numpy as np

import matplotlib.pyplot as plt

c = 3e8

wave = np.array([253.6e-9,283e-9,303.9e-9,330.2e-9,366.3e-9,435.8e-9])

freq = c/wave

potent = np.array([2.6,2.11,1.81,1.47,1.10,0.57])



m,b = np.polyfit(freq,potent,1)
print m,b

e = 1.6e-19

planck = m*e

print planck

plt.plot(freq,potent,'r.')

x = np.linspace(0,10,11)

y = m*x + b

plt.plot(x,y,'b-')

具体来说,我在包含y = m * x + b的行遇到了麻烦。所述行的输出是

array([-2.27198136, -2.27198136, -2.27198136, -2.27198136, -2.27198136,
       -2.27198136, -2.27198136, -2.27198136, -2.27198136, -2.27198136,
       -2.27198136])

这个结果是由于斜率'm'的幅度相当小,而'b'的幅度相当大。那么,我怎么能克服这个障碍呢?

另外,如果我写plt.plot(freq,potent,'r。')和plt.plot(x,y,'b - '),它会覆盖图吗?

2 个答案:

答案 0 :(得分:0)

你面临的问题被称为"失去意义"或"取消"这是一个数学问题,而不是计算机科学问题。

您需要做的是更改算法,以便不再发生取消。如何在简单的情况下执行此操作:

http://en.wikipedia.org/wiki/Loss_of_significance

但算法的变化在某些情况下并不简单,根本不可能。如果您使用更多数字进行计算,则无法真正解决问题。你宁愿推迟它。一旦更改了数字,您可能会再次遇到同样的问题。

答案 1 :(得分:0)

要显示更多小数点,请将其添加到代码末尾:

print('%.60f' % value_x)

“。60”表示要显示的小数点后60位,“ value_x”表示要显示的任何值。

除了默认输出(以科学计数法表示)之外,我还需要将P值输出为实际的十进制数时,会使用此值。

示例:

In [1]: pearson_coef, p_value = stats.pearsonr(df['horsepower'], df['price'])
In [2]: print("The Pearson Correlation Coefficient is", pearson_coef, " with a P-value of P = ", p_value, "or ")
In [3]: print('%.50f' % p_value)
Out [4]: The Pearson Correlation Coefficient is 0.8095745670036559  with a P-value of P = 6.369057428260101e-48 or 0.00000000000000000000000000000000000000000000000637