`AttributeError: rint` when using numpy.round

匿名 (未验证) 提交于 2019-12-03 01:58:03

问题:

I have a numpy array that looks like this:

[[41.743617 -87.626839]  [41.936943 -87.669838]  [41.962665 -87.65571899999999]] 

I want to round the numbers in the array to two decimal places, or three. I tried using numpy.around and numpy.round, but both of them give me the following error:

  File "/Library/Python/2.7/site-packages/numpy-1.8.0.dev_3084618_20130514-py2.7-macosx-10.8-intel.egg/numpy/core/fromnumeric.py", line 2452, in round_     return round(decimals, out) AttributeError: rint 

i used numpy.around(x, decimals = 2) and numpy.round(x,decimals=2)

Am I doing something wrong? Is there any other way to do this efficiently for a large array?

回答1:

You cannot round numpy arrays that are objects, this can be changed with astype as long as your array can be safely converted to floats:

>>> a = np.random.rand(5).astype(np.object) >>> a array([0.5137250555772075, 0.4279757819721647, 0.4177118178603122,        0.6270676923544128, 0.43733218329094947], dtype=object)  >>> np.around(a,3) Traceback (most recent call last):   File "", line 1, in    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 2384, in around     return round(decimals, out) AttributeError: rint  >>> np.around(a.astype(np.double),3) array([ 0.514,  0.428,  0.418,  0.627,  0.437]) 

You will receive similar errors with string, unicode, void, and char type arrays.



回答2:

You could do something like this:

numbers=[22.2,99.123,1213.1230] newnumbers=[] for n in numbers:     newnumbers.append(round(n)) #for comparison print numbers print newnumbers  


回答3:

numpy.around should work on a list of lists:

>>> import numpy as np >>> arr = [[41.743617, -87.626839],            [41.936943, -87.669838],            [41.962665, -87.65571899999999]] >>> >>> np.around(arr, decimals=2) array([[ 41.74, -87.63],        [ 41.94, -87.67],        [ 41.96, -87.66]]) >>> np.round(arr, decimals=2) array([[ 41.74, -87.63],        [ 41.94, -87.67],        [ 41.96, -87.66]]) 

However, note that it doesn't work on python longs. In fact it gives the same error you reported:

>>> np.round(3892438942893489234899848939) Traceback (most recent call last):   File "", line 1, in    File "/Users/csaftoiu/work/venv/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 2401, in round_     return _wrapit(a, 'round', decimals, out)   File "/Users/csaftoiu/work/venv/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 38, in _wrapit     result = getattr(asarray(obj),method)(*args, **kwds) AttributeError: rint 

What seems to be happening is that numpy can't convert some of the numbers in your python list to one of its data types. If it's a long then it's not a problem because it's already rounded, but you'll have to work around it.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!