Penso che il metodo __getitem__
del vettore Theano si aspetti una tupla come argomento! in questo modo:
class Vect (object):
def __init__(self,data):
self.data=list(data)
def __getitem__(self,key):
return self.data[key[0]:key[1]+1]
a=Vect('hello')
print a[0,2]
Qui print a[0,2]
quando a
è una normale lista solleva un'eccezione:
>>> a=list('hello')
>>> a[0,2]
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: list indices must be integers, not tuple
Ma qui il metodo __getitem__
è diverso e accetta una tupla come argomento.
È possibile passare il segno :
-__getitem__
come questo come :
significa fetta:
class Vect (object):
def __init__(self,data):
self.data=list(data)
def __getitem__(self,key):
return self.data[0:key[1]+1]+list(key[0].indices(key[1]))
a=Vect('hello')
print a[:,2]
Parlando None
, può essere utilizzato per l'indicizzazione in Python pianura così:
>>> 'hello'[None:None]
'hello'
Non ho lavorato con Theano, ma sembra che ha una stretta integrazione con NumPy, che introduce la sintassi si sta trattando: http: // docs. scipy.org/doc/numpy/reference/arrays.indexing.html –
Ondrej Slinták è corretto. Guardando il codice in https://github.com/Theano/Theano, i tensori di Theano sono implementati come array NumPy e lstm.py mostra che slice() restituisce un array NumPy a 2 o 3 dimensioni. Con l'affettatura NumPy.array, None è uguale all'oggetto newaxis che aggiunge un asse (dimensione) a un array, quindi m_ [:, None] avvolge ciascun elemento di m_ in un array, ad es. dato import numpy come np; a = np.array ([[1,2], [3,4]]), quindi a [:, None] è np.array ([[[1, 2]], [[3, 4]]]) –
Assicurati di fare un tutorial di numpy di base seguito dal tutorial di Theano. Questo risponderà a molte domande. – eickenberg