由于某种原因,浮点numpy数组的简单舍入似乎不起作用。。
我通过读取一个巨大的img(形状为(73527472))得到numpy数组。汇率:

>>> imarray[3500:3503, 5000:5003]
array([[ 73.33999634,  73.40000153,  73.45999908],
       [ 73.30999756,  73.37999725,  73.43000031],
       [ 73.30000305,  73.36000061,  73.41000366]], dtype=float32)

对于舍入,我一直在尝试使用numpy.around()作为原始值,也将值写入一个新数组,原始数组的副本,但由于某些原因没有结果。。
arr=imarray
numpy.around(imarray, decimals=3, out=arr)
arr[3500,5000] #results in 73.3399963379, as well as accessing imarray

所以,更高的精度!!!
是因为这么大的阵列吗?
我需要取整它以获得最频繁的值(模式),我正在搜索vay以避免越来越多的库。。

最佳答案

您的数组具有dtypefloat32。这是一个4字节的浮点。
使用float32表示的最接近73.340的浮动大约为73.33999634:

In [62]: x = np.array([73.33999634, 73.340], dtype = np.float32)

In [63]: x
Out[63]: array([ 73.33999634,  73.33999634], dtype=float32)

所以我认为np.around是正确的舍入,只是您的dtype粒度太大,无法舍入到您可能期望的数字。
In [60]: y = np.around(x, decimals = 3)

In [61]: y
Out[61]: array([ 73.33999634,  73.33999634], dtype=float32)

然而,如果dtype是np.float64
In [64]: x = np.array([73.33999634, 73.340], dtype = np.float64)

In [65]: y = np.around(x, decimals = 3)

In [66]: y
Out[66]: array([ 73.34,  73.34])

请注意,即使y的打印表示显示73.34,实数73.34也不一定可以精确地表示为float64。float64表示可能非常接近73.34,以至于NumPy选择将其打印为73.34。

关于python - 使用python从img读取的四舍五入的numpy浮点数组,返回的值未四舍五入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12513355/

10-11 17:58