Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中数组索引中使用None_Python_Theano - Fatal编程技术网

在Python中数组索引中使用None

在Python中数组索引中使用None,python,theano,Python,Theano,我正在使用Theano()的LSTM教程。在lstm.py()文件中,我不理解以下行: c = m_[:, None] * c + (1. - m_)[:, None] * c_ m[:,无]是什么意思?在这种情况下,m是theano向量,而c是矩阵。我认为theano向量的\uu getitem\uuu方法需要一个元组作为参数!像这样: class Vect (object): def __init__(self,data): self.data=list(data)

我正在使用Theano()的LSTM教程。在lstm.py()文件中,我不理解以下行:

c = m_[:, None] * c + (1. - m_)[:, None] * c_

m[:,无]
是什么意思?在这种情况下,
m
是theano向量,而
c
是矩阵。

我认为theano向量的
\uu getitem\uuu
方法需要一个元组作为参数!像这样:

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]
此处
打印[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
说到
None
,在普通Python中编制索引时也可以使用它:

>>> 'hello'[None:None]
'hello'

这个问题已经在Theano邮件列表中被问到和回答,但实际上是关于numpy索引的基础知识

以下是问题和答案

为完整起见,这里有另一种解释:使用
None
进行切片会将轴添加到数组中,请参阅相关的numpy文档,因为它在numpy和THANO中的行为相同:

请注意,
np.newaxis是None

import numpy as np
a = np.arange(30).reshape(5, 6)

print a.shape  # yields (5, 6)
print a[np.newaxis, :, :].shape  # yields (1, 5, 6)
print a[:, np.newaxis, :].shape  # yields (5, 1, 6)
print a[:, :, np.newaxis].shape  # yields (5, 6, 1)
通常,这用于调整形状,使其能够广播到更高的维度。例如,中轴线上的7次拼接可以达到

b = a[:, np.newaxis] * np.ones((1, 7, 1))

print b.shape  # yields (5, 7, 6), 7 copies of a along the second axis

实际上,在普通列表上调用
a[:,3]
会产生
TypeError:列表索引必须是整数,而不是元组。然而,我不知道这里的元组是什么。你能详细说明一下吗?元组是逗号:P是的,python中使元组成为元组的实际东西是逗号,而不是paren。如果你想说得更清楚,你可以写一个[(:,3)]。@RishavKundu这就是为什么
(“boo!”)
不是元组,而
“merp”,
是元组的原因。我没有使用Theano,但它似乎与NumPy紧密集成,这引入了你正在处理的语法:Ondrej Slinták是正确的。查看中的代码,无张量被实现为NumPy数组,lstm.py显示slice()返回一个二维或三维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教程。这将回答很多问题。
b = a[:, np.newaxis] * np.ones((1, 7, 1))

print b.shape  # yields (5, 7, 6), 7 copies of a along the second axis