¿Desea probar una matriz de longitud cero, una matriz que contiene todos los ceros, o ambos? ¿Cuál es su definición de 'vacío'?
John Lyon
12
@StevenRumbalski: ¡Pero también len(array([[]])es 1!
strpeter
len()da el número de dimensiones en el primer eje. Pero una matriz puede tener una dimensión distinta de cero en el primer eje pero aún estar vacía si tiene una dimensión cero en otro eje. sizees mejor ya que es el producto de todos los ejes.
Asmeurer
Respuestas:
303
Siempre puedes echar un vistazo al .sizeatributo. Se define como un entero y es cero ( 0) cuando no hay elementos en la matriz:
import numpy as np
a = np.array([])if a.size ==0:# Do something when `a` is empty
Esto es genial para numpy, pero es desafortunado que se considere poco propónico para las listas. Consulte la discusión para las listas: stackoverflow.com/questions/53513/… Sería bueno usar el mismo patrón para matrices y listas numpy.
eric
El código NumPy en general no funciona correctamente en las listas o viceversa. Tienes que escribir el código de una manera diferente si estás usando listas contra matrices NumPy.
El objeto principal de NumPy es la matriz multidimensional homogénea. En Numpy las dimensiones se llaman ejes. El número de ejes es rango. La clase de matriz de Numpy se llama ndarray. También es conocido por la matriz de alias. Los atributos más importantes de un objeto ndarray son:
ndarray.ndim
el número de ejes (dimensiones) de la matriz. En el mundo de Python, el número de dimensiones se conoce como rango.
ndarray.shape
las dimensiones de la matriz. Esta es una tupla de enteros que indica el tamaño de la matriz en cada dimensión. Para una matriz con n filas ym columnas, la forma será (n, m). La longitud de la tupla de forma es, por lo tanto, el rango, o número de dimensiones, ndim.
ndarray.size
el número total de elementos de la matriz. Esto es igual al producto de los elementos de la forma.
Sin embargo, una advertencia. Tenga en cuenta que np.array (None) .size devuelve 1! Esto se debe a que a.size es equivalente a np.prod (a.shape), np.array (None) .shape is () y un producto vacío es 1.
>>>import numpy as np
>>> np.array(None).size
1>>> np.array(None).shape
()>>> np.prod(())1.0
Por lo tanto, uso lo siguiente para probar si una matriz numpy tiene elementos:
>>>def elements(array):...return array.ndim and array.size
>>> elements(np.array(None))0>>> elements(np.array([]))0>>> elements(np.zeros((2,3,4)))24
@DrBwts Su matriz no contiene el Noneobjeto. Mira su forma.
Navin
Las matrices con forma ()son matrices escalares, que contienen un elemento (el escalar). En este ejemplo, el escalar es None( Noneno tiene ningún significado especial, esto es solo una matriz de objetos). Depende de lo que esté haciendo, pero lo más probable es que desee considerar que las matrices escalares no estén vacías.
Asmeurer
-1
¿Por qué querríamos verificar si una matriz es empty? Las matrices no crecen ni se reducen de la misma manera que las listas. Comenzar con una matriz 'vacía' y crecer con np.appendun error frecuente de principiante.
Usando una lista en if alist:bisagras en su valor booleano:
Pero tratar de hacer lo mismo con una matriz produce (en la versión 1.18):
In[104]: bool(np.array([]))/usr/local/bin/ipython3:1:DeprecationWarning:The truth value
of an empty array is ambiguous.ReturningFalse, but in
future this will result in an error.Use`array.size >0` to
check that an array isnot empty.#!/usr/bin/python3Out[104]:FalseIn[105]: bool(np.array([1]))Out[105]:True
y bool(np.array([1,2])produce el infame error de ambigüedad.
len(array( [] ))
es 0.len(array( [0] )
es 1.len(array([[]])
es 1!len()
da el número de dimensiones en el primer eje. Pero una matriz puede tener una dimensión distinta de cero en el primer eje pero aún estar vacía si tiene una dimensión cero en otro eje.size
es mejor ya que es el producto de todos los ejes.Respuestas:
Siempre puedes echar un vistazo al
.size
atributo. Se define como un entero y es cero (0
) cuando no hay elementos en la matriz:fuente
http://www.scipy.org/Tentative_NumPy_Tutorial#head-6a1bc005bd80e1b19f812e1e64e0d25d50f99fe2
fuente
Sin embargo, una advertencia. Tenga en cuenta que np.array (None) .size devuelve 1! Esto se debe a que a.size es equivalente a np.prod (a.shape), np.array (None) .shape is () y un producto vacío es 1.
Por lo tanto, uso lo siguiente para probar si una matriz numpy tiene elementos:
fuente
None
objeto no es una matriz vacía, vea las respuestas aquí para obtener más detallesNone
objeto. Mira su forma.()
son matrices escalares, que contienen un elemento (el escalar). En este ejemplo, el escalar esNone
(None
no tiene ningún significado especial, esto es solo una matriz de objetos). Depende de lo que esté haciendo, pero lo más probable es que desee considerar que las matrices escalares no estén vacías.¿Por qué querríamos verificar si una matriz es
empty
? Las matrices no crecen ni se reducen de la misma manera que las listas. Comenzar con una matriz 'vacía' y crecer connp.append
un error frecuente de principiante.Usando una lista en
if alist:
bisagras en su valor booleano:Pero tratar de hacer lo mismo con una matriz produce (en la versión 1.18):
y
bool(np.array([1,2])
produce el infame error de ambigüedad.fuente