Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python np.round或np.around不';行不通_Python_Arrays_Numpy - Fatal编程技术网

Python np.round或np.around不';行不通

Python np.round或np.around不';行不通,python,arrays,numpy,Python,Arrays,Numpy,我有这个阵列: arr = np.array([66.5, 89.4000015, 57.2000008, 86.9000015, 64.5999985, 92.3000031, 74.1999969, 76.0999985, 92.0999985, 81.6999969, 72.0999985, 78.8000031, 81.4000015, 95.4000015, 73.5 , 58.5999985, 68.3000031, 68.9000015

我有这个阵列:

arr = np.array([66.5, 89.4000015, 57.2000008, 86.9000015, 64.5999985,
      92.3000031, 74.1999969, 76.0999985, 92.0999985, 81.6999969,
      72.0999985, 78.8000031, 81.4000015, 95.4000015, 73.5      ,
      58.5999985, 68.3000031, 68.9000015, 68.6999969, 92.       ])
我试图对每个数字进行四舍五入,并使用了
np.around

[in]  np.around(arr, 2)

[out] array([66.5, 89.4, 57.2, 86.9, 64.6, 92.3, 74.2, 76.1, 92.1, 81.7, 72.1,
   78.8, 81.4, 95.4, 73.5, 58.6, 68.3, 68.9, 68.7, 92. ])

[in]  np.around(arr, 4)

[out] array([66.5, 89.4, 57.2, 86.9, 64.6, 92.3, 74.2, 76.1, 92.1, 81.7, 72.1,
   78.8, 81.4, 95.4, 73.5, 58.6, 68.3, 68.9, 68.7, 92. ])

[in] np.around(arr, 5)
[out] array([66.5, 89.4, 57.2, 86.9, 64.6, 92.3, 74.2, 76.1, 92.1, 81.7, 72.1,
   78.8, 81.4, 95.4, 73.5, 58.6, 68.3, 68.9, 68.7, 92. ])

[in]  np.around(arr, 6)

[out] array([66.5     , 89.400002, 57.200001, 86.900002, 64.599998, 92.300003,
   74.199997, 76.099998, 92.099998, 81.699997, 72.099998, 78.800003,
   81.400002, 95.400002, 73.5     , 58.599998, 68.300003, 68.900002,
   68.699997, 92.      ])
当小数位数小于
5
时,
np.around()
不起作用。当它大于
6
时,
np.around
工作正常

感谢您的帮助

安妮

如何:圆 基于您描述的“意外行为”,我相信您还不清楚哪一轮操作或它们对数字的影响,或者如何将浮点格式化为字符串

让我们研究一下四舍五入到不同值的
n=4
位数时的差异

基线 我们定义了一个包含13个值的数组(13只是为了得到一些数字),从0到1

values = np.linspace(0, 1, 13)
该数组包含:

array([0.        , 0.08333333, 0.16666667, 0.25      , 0.33333333,
       0.41666667, 0.5       , 0.58333333, 0.66666667, 0.75      ,
       0.83333333, 0.91666667, 1.        ])
当第n+1位数大于或等于
5
时,将增加第n位数的值,否则不执行任何操作。这和我的一样

当存在数字时,将增加整数部分的值,并减少数字

np.ceil(r)
>>> array([0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.floor(r)
>>> array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.])
我会把数字去掉

np.ceil(r)
>>> array([0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.floor(r)
>>> array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.])
将数字格式化为字符串有多种方法:我们将探讨一些更常用的方法

格式设置为浮动 要格式化浮点数,请使用符号
.nf
,其中
n
是要保留的位数。它将删除以下所有数字,并在需要时添加零作为填充

[ "{:0.4f}".format(v) for v in r]
>>> ['0.0000', '0.0833', '0.1667', '0.2500', '0.3333', '0.4167', '0.5000',
     '0.5833', '0.6667', '0.7500', '0.8333', '0.9167', '1.0000']
[ "{:0.4%}".format(v) for v in r]
>>> ['0.0000%', '8.3333%', '16.6667%', '25.0000%', '33.3333%', '41.6667%',
'50.0000%', '58.3333%', '66.6667%', '75.0000%', '83.3333%', '91.6667%',
'100.0000%']
格式设置为百分比 要将浮点数格式化为百分比,请使用符号
.n%
,其中
n
是要保留的位数,考虑到该数字将乘以
100
。它将删除以下所有数字,并在需要时添加零作为填充

[ "{:0.4f}".format(v) for v in r]
>>> ['0.0000', '0.0833', '0.1667', '0.2500', '0.3333', '0.4167', '0.5000',
     '0.5833', '0.6667', '0.7500', '0.8333', '0.9167', '1.0000']
[ "{:0.4%}".format(v) for v in r]
>>> ['0.0000%', '8.3333%', '16.6667%', '25.0000%', '33.3333%', '41.6667%',
'50.0000%', '58.3333%', '66.6667%', '75.0000%', '83.3333%', '91.6667%',
'100.0000%']
科学记数法中的格式 要将浮点数格式化为百分比,请使用符号
.ne
,其中
n
是您希望保留的位数,考虑到该数字将被转换为。它将删除以下所有数字,并在需要时添加零作为填充,在末尾添加科学记数法中数字的指数

[ "{:e}".format(v) for v in r]
>>> [
    '0.0000e+00', '8.3333e-02', '1.6667e-01', '2.5000e-01', '3.3333e-01',
    '4.1667e-01', '5.0000e-01', '5.8333e-01', '6.6667e-01', '7.5000e-01',
    '8.3333e-01', '9.1667e-01', '1.0000e+00'
]
好处:格式化复数 假设您有一个复数
a=3j+2
:要打印其组件,请访问其属性:

"The real component is {0.real} and the imaginary one is {0.imag}".format(a)
>>> 'The real component is 2.0 and the imaginary one is 3.0'

你说它不起作用是什么意思?看起来效果不错。你能说说你期望的结果吗?这些结果在我看来很好。我相信你可能会混淆。或者NumPy舍入到最接近的偶数值。我希望在使用np.around(arr,4)时使用数组[66.5000,89.4000,57.2000,…]。但它给了我数组[66.5,89.4,57.2,…]