【发布时间】:2015-12-31 06:42:58
【问题描述】:
我正在Python 2.7 中编写一个简单的代码来将我拥有的几个非常长的文件更改为文本文件,以便我可以在文本阅读器中滚动浏览它们。
但是,我发现文件中的 numpy.array 有很长的浮点数,以不需要的科学记数法结尾。我尝试使用numpy.around 或numpy.round 将它们更改为只有小数点后两位,但它不会改变任何东西。这是我的代码:
import h5py
import sys
from Tkinter import Tk
from tkFileDialog import askopenfilename
import numpy as np
sys.stdout.write( 'Please pick file from window\n')
fileName = askopenfilename() # show an "Open" dialog box and return the path to the selected file
sys.stdout.write(fileName)
f = h5py.File(fileName, 'r')
dataset = f['/dcoor'][:]
newname = raw_input('New file name ')
print type(dataset[0][0])
dataset = np.asarray(dataset)
dataset = dataset.astype(float)
print type(dataset[0][0])
print '\nDataset before rounding: \n', dataset
dataset = np.around(dataset, decimals = 2)
print '\nDataset after rounding: \n', dataset
np.savetxt(newname,dataset)
我没有收到任何错误消息,我的输出是这样的:
New file name test4
<type 'numpy.float32'>
<type 'numpy.float64'>
Dataset before rounding:
[[ 1.48999996e+01 1.07949997e+02 1.80000007e-01 3.59000000e+02
0.00000000e+00]
[ 1.60100002e+01 1.07489998e+02 3.89999986e-01 3.98000000e+02
0.00000000e+00]
[ 1.86700001e+01 1.07669998e+02 5.89999974e-01 4.26000000e+02
0.00000000e+00]
...,
[ 2.78700008e+01 2.75200005e+01 2.99973999e+03 4.15000000e+02
0.00000000e+00]
[ 2.60499992e+01 2.72800007e+01 2.99991992e+03 4.10000000e+02
0.00000000e+00]
[ 2.56599998e+01 2.85400009e+01 3.00009009e+03 4.37500000e+02
0.00000000e+00]]
Dataset after rounding:
[[ 1.49000000e+01 1.07950000e+02 1.80000000e-01 3.59000000e+02
0.00000000e+00]
[ 1.60100000e+01 1.07490000e+02 3.90000000e-01 3.98000000e+02
0.00000000e+00]
[ 1.86700000e+01 1.07670000e+02 5.90000000e-01 4.26000000e+02
0.00000000e+00]
这很奇怪,因为它似乎会舍入一些数字而不是其他数字,并且还保留了尾随的 zeros。我转换了原始的array,因为我认为这可能会有所作为,但显然没有。问题可能是array 太长了吗?每一个大约有 16,000 行。会不会是原来的array 保存在了一个保持原来格式的hdf5 文件中?我不能回去重新测试我的老鼠,所以如果是这样的话,我宁愿SOL。感谢您的帮助。
【问题讨论】:
标签: arrays python-2.7 numpy rounding