Python函数,用于标识列表或数组中的数字是否更接近0或1

Aly*_*ono 17 python arrays numpy function list

我有numpy一系列数字.以下是一个例子:

[[-2.10044520e-04  1.72314372e-04  1.77235336e-04 -1.06613465e-04
6.76617611e-07  2.71623057e-03 -3.32789944e-05  1.44899758e-05
5.79249863e-05  4.06502549e-04 -1.35823707e-05 -4.13955189e-04
5.29862793e-05 -1.98286005e-04 -2.22829175e-04 -8.88758230e-04
5.62228710e-05  1.36249752e-05 -2.00474996e-05 -2.10090068e-05
1.00007518e+00  1.00007569e+00 -4.44597417e-05 -2.93724453e-04
1.00007513e+00  1.00007496e+00  1.00007532e+00 -1.22357142e-03
3.27903892e-06  1.00007592e+00  1.00007468e+00  1.00007558e+00
2.09869172e-05 -1.97610235e-05  1.00007529e+00  1.00007530e+00
1.00007503e+00 -2.68725642e-05 -3.00372853e-03  1.00007386e+00
1.00007443e+00  1.00007388e+00  5.86993822e-05 -8.69989983e-06
1.00007590e+00  1.00007488e+00  1.00007515e+00  8.81850779e-04
2.03875532e-05  1.00007480e+00  1.00007425e+00  1.00007517e+00
-2.44678912e-05 -4.36556267e-08  1.00007436e+00  1.00007558e+00
1.00007571e+00 -5.42990711e-04  1.45517859e-04  1.00007522e+00
1.00007469e+00  1.00007575e+00 -2.52271817e-05 -7.46339417e-05
1.00007427e+00]]
Run Code Online (Sandbox Code Playgroud)

我想知道每个数字是否接近0或1.是否有Python中的函数可以执行此操作或者我是否必须手动执行此操作?

Din*_*ari 22

一种直截了当的方式:

lst=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]

closerTo1 = [x >= 0.5 for x in lst]
Run Code Online (Sandbox Code Playgroud)

或者你可以使用np:

import numpy as np
lst=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]

arr = np.array(lst)
closerTo1 = arr >= 0.5
Run Code Online (Sandbox Code Playgroud)

请注意,>= 0.5可以更改为> 0.5,但是您选择对其进行处理.

  • 最好将NumPy用于NumPy阵列,+ 1.如果性能问题,还值得一提[其他选项](/sf/ask/1907654661/). (3认同)

tim*_*geb 15

numpy.rint是一个ufunc,它将数组的元素舍入到最接近的整数.

>>> a = np.arange(0, 1.1, 0.1)
>>> a
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
>>> np.rint(a)
array([0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1.])
Run Code Online (Sandbox Code Playgroud)

如果数字不必介于0和1之间怎么办?

在那种情况下,我会用numpy.where.

>>> a = np.arange(-2, 2.1, 0.1)
>>> a
array([-2.00000000e+00, -1.90000000e+00, -1.80000000e+00, -1.70000000e+00,
       -1.60000000e+00, -1.50000000e+00, -1.40000000e+00, -1.30000000e+00,
       -1.20000000e+00, -1.10000000e+00, -1.00000000e+00, -9.00000000e-01,
       -8.00000000e-01, -7.00000000e-01, -6.00000000e-01, -5.00000000e-01,
       -4.00000000e-01, -3.00000000e-01, -2.00000000e-01, -1.00000000e-01,
        1.77635684e-15,  1.00000000e-01,  2.00000000e-01,  3.00000000e-01,
        4.00000000e-01,  5.00000000e-01,  6.00000000e-01,  7.00000000e-01,
        8.00000000e-01,  9.00000000e-01,  1.00000000e+00,  1.10000000e+00,
        1.20000000e+00,  1.30000000e+00,  1.40000000e+00,  1.50000000e+00,
        1.60000000e+00,  1.70000000e+00,  1.80000000e+00,  1.90000000e+00,
        2.00000000e+00])
>>> np.where(a <= 0.5, 0, 1)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
Run Code Online (Sandbox Code Playgroud)

  • @Eliyah然后`np.where`! (2认同)

NPE*_*NPE 6

这是一个简单的方法:

>>> a = np.arange(-2, 2.1, 0.1)
>>> (a >= .5).astype(np.float)
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.])
Run Code Online (Sandbox Code Playgroud)

(如果需要整数,请更改np.floatnp.int.)


Dan*_*ejo 5

你可以使用numpy.where:

import numpy as np

arr = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 2.0])
result = np.where(arr >= 0.5, 1, 0)
print(result)
Run Code Online (Sandbox Code Playgroud)

产量

[0 0 0 0 1 1 1 1 1 1]
Run Code Online (Sandbox Code Playgroud)

请注意,对于大于1的数字(例如2),这将返回1.