En Python, ¿cómo creo una matriz numpy de formas arbitrarias rellenas con todos True
o todo False
?
¿Cómo crear una matriz numpy de todo Verdadero o todo Falso?
miguel currie
miguel currie
La respuesta:
numpy.full((2, 2), True)
Explicación:
numpy crea matrices de todos los unos o todos los ceros muy fácilmente:
p.ej numpy.ones((2, 2))
o numpy.zeros((2, 2))
Ya que True
y False
se representan en Python como 1
y 0
respectivamente, solo tenemos que especificar que esta matriz debe ser booleana usando el opcional dtype
parámetro y hemos terminado:
numpy.ones((2, 2), dtype=bool)
devoluciones:
array([[ True, True],
[ True, True]], dtype=bool)
ACTUALIZACIÓN: 30 de octubre de 2013
desde numpy versión 1.8nosotros podemos usar full
para lograr el mismo resultado con una sintaxis que muestre más claramente nuestra intención (como señala fmonegaglia):
numpy.full((2, 2), True, dtype=bool)
ACTUALIZACIÓN: 16 de enero de 2017
Desde al menos numpy versión 1.12, full
lanza automáticamente a la dtype
del segundo parámetro, por lo que podemos simplemente escribir:
numpy.full((2, 2), True)
-
dtype=int matriz inicializada no se puede utilizar para la selección de elementos de matriz.
– Jichao
14 de mayo de 2016 a las 2:07
-
Esto funciona. Sin embargo, tenga cuidado porque como dice @Jichao,
a=np.ones((2,2))
seguido pora.dtype=bool
No funciona.– popurrí56
12 de marzo de 2017 a las 18:03
-
La respuesta asume que np.ones o np.zeros con dtype bool tienen que convertir la matriz int como booleana. ¿Es cierta esta suposición? Creo que crea una matriz booleana y no crea una matriz int primero y luego se convierte. Corrija amablemente esta respuesta si estoy en lo correcto.
– Alok Nayak
24 de agosto de 2018 a las 7:01
fmonegaglia
numpy.full((2,2), True, dtype=bool)
-
+1 Creo que esta debería ser la respuesta aceptada. Parece más natural llenar una matriz con bools que llenarla con números para convertirlos en bools.
–Zelphir Kaltstahl
18/04/2016 a las 20:55
-
los
ones
yzeros
Las respuestas no construyen una matriz de enteros. Construyen una matriz de bools directamente.– usuario2357112
29 de junio de 2016 a las 16:01
-
Es
numpy.full((2,2), True)
¿un equivalente?– Pavel
15/10/2017 a las 16:34
-
Está en numpy 1.12+. No recuerdo si se aplica a versiones anteriores tampoco
– fmonegaglia
20 de octubre de 2017 a las 12:15
-
lleno tiende a ser mucho más lento que unos o ceros
– Sr. E
11 de marzo de 2021 a las 17:26
ones
y zeros
que crean matrices llenas de unos y ceros respectivamente, tome una opción dtype
parámetro:
>>> numpy.ones((2, 2), dtype=bool)
array([[ True, True],
[ True, True]], dtype=bool)
>>> numpy.zeros((2, 2), dtype=bool)
array([[False, False],
[False, False]], dtype=bool)
MSeifert
Si no tiene que ser escribible, puede crear una matriz de este tipo con np.broadcast_to
:
>>> import numpy as np
>>> np.broadcast_to(True, (2, 5))
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Si necesita que se pueda escribir, también puede crear una matriz vacía y fill
tú mismo:
>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Estos enfoques son solo sugerencias alternativas. En general, debe ceñirse a np.full
, np.zeros
o np.ones
como sugieren las otras respuestas.
punto de referencia para la respuesta de Michael Currie
import perfplot
bench_x = perfplot.bench(
n_range= range(1, 200),
setup = lambda n: (n, n),
kernels= [
lambda shape: np.ones(shape, dtype= bool),
lambda shape: np.full(shape, True)
],
labels = ['ones', 'full']
)
bench_x.show()
Rápidamente corrió un tiempo para ver, si hay alguna diferencia entre el np.full
y np.ones
versión.
Responder: No
import timeit
n_array, n_test = 1000, 10000
setup = f"import numpy as np; n = {n_array};"
print(f"np.ones: {timeit.timeit('np.ones((n, n), dtype=bool)', number=n_test, setup=setup)}s")
print(f"np.full: {timeit.timeit('np.full((n, n), True)', number=n_test, setup=setup)}s")
Resultado:
np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s
IMPORTANTE
Con respecto a la publicación sobre np.empty
(y no puedo comentar, ya que mi reputación es demasiado baja):
NO HAGAS ESO. NO USAR np.empty
para inicializar un todo-True
formación
Como la matriz está vacía, la memoria no está escrita y no hay garantía, cuáles serán sus valores, por ejemplo
>>> print(np.empty((4,4), dtype=bool))
[[ True True True True]
[ True True True True]
[ True True True True]
[ True True False False]]
nikithashr
>>> a = numpy.full((2,4), True, dtype=bool)
>>> a[1][3]
True
>>> a
array([[ True, True, True, True],
[ True, True, True, True]], dtype=bool)
numpy.full(Tamaño, Valor escalar, Tipo). También hay otros argumentos que se pueden pasar, para documentación sobre eso, verifique https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
-
Bueno, otra respuesta ya respondida usando
np.full
– Hace más de un año!– MSeifert
15 de abril de 2017 a las 2:41