Я думаю, что метод Theano vector __getitem__
ожидает кортеж в качестве аргумента! как это:
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]
print a[0,2]
Вот когда a
обычный список сгенерирует исключение:
>>> 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
Но здесь метод __getitem__
отличается и принимает кортеж в качестве аргумента.
Вы можете передать :
знак __getitem__
как это как :
означает ломтик:
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]
Говоря о None
, он может быть использован при индексации в простом Python, а также:
>>> 'hello'[None:None]
'hello'
Я не работал с Теано, но мне кажется, что имеет тесную интеграцию с NumPy, который вводит синтаксис вы имеете дело с: HTTP: // Docs. scipy.org/doc/numpy/reference/arrays.indexing.html –
Ondrej Slinták верен. Рассматривая код в https://github.com/Theano/Theano, тензоры Theano реализуются как массивы NumPy, а lstm.py показывает, что slice() возвращает 2 или 3 мерный массив NumPy. При нарезке NumPy.array None - это то же самое, что и объект newaxis, который добавляет ось (измерение) в массив, поэтому m_ [:, None] обертывает каждый элемент m_ в массиве, например. заданный импорт numpy как np; a = np.array ([[1,2], [3,4]]), тогда a [:, None] является np.array ([[[1, 2]], [[3, 4]]]) –
Удостоверьтесь, что вы делаете базовый учебник numpy, за которым следует учебник Theano. Это ответит на множество вопросов. – eickenberg