我有太大的数据和太小的数据形式的numpy数组。和太多的计算。我不想在任何地方应用round(num,k)
。有没有办法做一些全局设置来舍入3位小数的所有内容?我使用Ipython笔记本。
答案 0 :(得分:3)
In [1]: import numpy as np
In [2]: np.random.randn(5)
Out[2]: array([-0.15421429, -1.3773473 , 0.89456261, -0.17368004, -0.92570868])
In [3]: np.set_printoptions(precision=3)
In [4]: np.random.randn(5)
Out[4]: array([-0.497, -1.057, -0.638, -0.566, 0.077])
在IPython会话中,你也可以使用%precision
魔法做同样的事情:
In [5]: %precision 2
Out[5]: u'%.2f'
In [6]: np.random.randn(5)
Out[6]: array([-1.06, 0.33, -1.8 , 0.74, -0.73])
请注意,此仅影响数字的显示方式 - 在幕后,numpy仍在计算中使用完整浮点精度(np.double
约15个十进制数字)。 / p>
似乎OP有兴趣将数组写入具有较少精度小数位的文本文件,而不是它们的显示方式。
将numpy数组写入文本文件的一种方法是使用np.savetxt
。此函数采用fmt
参数,允许您指定任意字符串格式,包括要打印的小数位数。
例如:
x = np.random.randn(10)
# this writes the array out to 6 decimal places
np.savetxt('six_dp.txt', x, fmt='.6f')
# this writes the same array to 3 decimal places
np.savetxt('three_dp.txt', x, fmt='.3f')
您可以阅读有关字符串格式如何在Python here中工作的更多信息。