Recientemente me he encontrado con problemas al crear matrices de objetos Numpy usando p. Ej.matrices de objetos nudosos
a = np.array([c], dtype=np.object)
donde c es una instancia de una clase complicada, y en algunos casos Numpy intenta acceder a algunos de los métodos de esa clase. Sin embargo, al hacer:
a = np.empty((1,), dtype=np.object)
a[0] = c
resuelve el problema. Tengo curiosidad sobre cuál es la diferencia entre estos dos internamente. ¿Por qué en el primer caso Numpy podría intentar acceder a algunos atributos o métodos de c
?
EDIT: Para el registro, que aquí es el código de ejemplo que muestra el problema:
import numpy as np
class Thing(object):
def __getitem__(self, item):
print "in getitem"
def __len__(self):
return 1
a = np.array([Thing()], dtype='object')
Esto muestra getitem
dos veces. Básicamente, si __len__
está presente en la clase, entonces es cuando uno puede ejecutar un comportamiento inesperado.
No relacionado, pero ¿por qué 'np.object' y no sólo' object'? – JBernardo
Los dos son equivalentes ('' object == np.object'' devuelve '' True'') por lo que esto no está relacionado con los problemas que estoy viendo. – astrofrog
@astrofog Es por eso que pregunté y dije que no estaba relacionado. – JBernardo