`AttributeError: rint` when using numpy.round

后端 未结 3 1254
一生所求
一生所求 2020-12-07 00:10

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

相关标签:
3条回答
  • 2020-12-07 00:50

    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 "<stdin>", line 1, in <module>
      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.

    0 讨论(0)
  • 2020-12-07 00:55

    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 
    
    0 讨论(0)
  • 2020-12-07 01:06

    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 "<stdin>", line 1, in <module>
      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.

    0 讨论(0)
提交回复
热议问题