ndarray functions array python arrays list function numpy

functions - Función de Python que identifica si los números en una lista o matriz están más cerca de 0 o 1



numpy ndarray (10)

Alternativamente, puede utilizar un operador ternario.

x = [-0.2, 0.1, 1.1, 0.75, 0.4, 0.2, 1.5, 0.9] a = 0 b = 1 [a if i <= (a+b)/2 else b for i in x]

Tengo una numpy cantidad de números. A continuación se muestra un ejemplo:

[[-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]]

Quiero saber si cada uno de los números está más cerca de 0 o 1. ¿Hay alguna función en Python que pueda hacerlo o tengo que hacerlo manualmente?


Aquí hay una manera simple de hacer esto:

>>> 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.])

(Cambie np.float a np.int si desea enteros).


Aquí hay una simple generalización para cualquier número arbitrario a y b , en lugar de solo 0 y 1 :

def closerab(l, a=0, b=1): l = np.asarray(l) boolarr = (np.abs(l - b) > np.abs(l - a)) # returns two lists of indices, one for numbers closer to a and one for numbers closer to b return boolarr.nonzero()[0], (boolarr==0).nonzero()[0]

Esto devolverá dos listas, una con los índices de los números más cercanos a a , y otra con los índices de los números más cercanos a b .

Probándolo:

l = [ -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 ] print(closerab(l, 0, 1))

Esto produce:

(array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 27, 28, 32, 33, 37, 38, 42, 43, 47, 48, 52, 53, 57, 58, 62, 63]), array([20, 21, 24, 25, 26, 29, 30, 31, 34, 35, 36, 39, 40, 41, 44, 45, 46, 49, 50, 51, 54, 55, 56, 59, 60, 61, 64]))


Desde la función incorporada de Python docs round(number[, ndigits]) :

Devuelva el número de valor de punto flotante redondeado a dígitos ndigits después del punto decimal. Si se omite ndigits , el valor predeterminado es cero. El resultado es un número de punto flotante. Los valores se redondean al múltiplo más cercano de 10 a la potencia menos ndigits ; si dos múltiplos están igualmente cerca, el redondeo se realiza fuera de 0 (por ejemplo, la round(0.5) es 1.0 y la round(-0.5) es -1.0 ).

En particular, para las matrices numpy, puede utilizar la función numpy.round_ .


Podría usar abs() para medir distancias entre su número y 0 y 1 y verificar cuál es más corto.

x = [[-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]] rounded_x = [0 if abs(i) < abs(1-i) else 1 for i in x[0]] print(rounded_x)

Salida:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1]


Podrías usar 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)

Salida

[0 0 0 0 1 1 1 1 1 1]

Tenga en cuenta que esto devolverá 1 para los números por encima de 1 (por ejemplo, 2).


Se puede usar round :

[round(i) for i in [0.1,0.2,0.3,0.8,0.9]]


Un camino sencillo:

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]

O puedes usar 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

Tenga en cuenta que >= 0.5 se puede cambiar a > 0.5 , sin embargo, usted elige tratarlo.


numpy.rint es un ufunc que redondeará los elementos de una matriz al entero más cercano .

>>> 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.])

¿Qué pasa si los números no tienen que estar entre 0 y 1?

En ese caso, usaría 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])


your_list=[[-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]] close_to_one_or_zero=[1 if x > 0.5 else 0 for x in your_list[0]] close_to_one_or_zero [0, 0, 0, 0, 0,....... 1, 1, 1, 0, 0, 1]