numpy - 如何对数组的最后两列取整
怎么才能把这个数组中par1和par2这两列的每个数都四舍五入到小数点后6位呢?下面是我目前尝试的代码,但我遇到了一个奇怪的错误。
(我想这可能也不行,因为它会把第一列的数也四舍五入?)
a = numpy.array([('54641', 5.2283950300822005e-19, 0.99986935998398196),
('19463068', 1.9641846381816301e-11, 3.9584362981756201e-24),
('19500889', 3.0296847410896202e-11, 1.05569703377661e-11),
('19528632', 3.5188395912917703e-11, 1.4213535554705201e-09)],
dtype=[('pos', 'S100'), ('par1', '<f8'), ('par2', '<f8')])
a = numpy.around(a, decimals=6)
奇怪的错误(你知道为什么会出现这个吗?)
Traceback (most recent call last):
File "msg/combine.py", line 244, in <module>
a = numpy.around(a, decimals=6)
File "/usr/local/msg/lib/python2.6/site-packages/numpy/core/fromnumeric.py", line 2611, in around
return round(decimals, out)
TypeError: return arrays must be of ArrayType
1 个回答
3
不确定你是否可以在没有循环的情况下做到这一点:
>>> for col in ['par1','par2']:
... a[col] = numpy.around(a[col],2)
...
>>> a
array([('54641', 0.0, 1.0), ('19463068', 0.0, 0.0), ('19500889', 0.0, 0.0),
('19528632', 0.0, 0.0)],
dtype=[('pos', 'S100'), ('par1', '<f8'), ('par2', '<f8')])
当然,你可以使用pandas来处理结构化数组:
>>> import pandas as pd
>>> data = pd.DataFrame(a)
>>> data[['par1','par2']] = numpy.around(data[['par1','par2']], 2)
>>> data
pos par1 par2
0 54641 0 1
1 19463068 0 0
2 19500889 0 0