Ultimamente ho riscontrato problemi durante la creazione di matrici di oggetti Numpy utilizzando ad es.Matrici di oggetti Numpy
a = np.array([c], dtype=np.object)
dove c è un'istanza di una classe complicata, e in alcuni casi Numpy tenta di accedere alcuni metodi di quella classe. Tuttavia, facendo:
a = np.empty((1,), dtype=np.object)
a[0] = c
risolve il problema. Sono curioso di sapere qual è la differenza tra questi due internamente. Perché nel primo caso Numpy potrebbe provare ad accedere ad alcuni attributi o metodi di c
?
EDIT: Per la cronaca, ecco il codice di esempio che illustra il 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')
Questo stampa getitem
due volte. Fondamentalmente se __len__
è presente nella classe, allora questo è quando si può incorrere in comportamenti imprevisti.
Non correlate, ma perché 'np.object' e non solo' object'? – JBernardo
I due sono equivalenti ('' object == np.object'' restituisce '' True''), quindi questo non è correlato ai problemi che sto vedendo. – astrofrog
@astrofog Ecco perché ho chiesto e ho detto che non era correlato. – JBernardo