(n,)在numpy和向量的上下文中意味着什么?

时间:2016-09-20 22:51:21

标签: python numpy machine-learning neural-network

我尝试过搜索StackOverflow,谷歌搜索,甚至使用symbolhound进行字符搜索,但无法找到答案。具体来说,我对Ch感到困惑。 1尼尔森的神经网络和深度学习,其中他说“假设输入typedef unsigned int uint; class MyBreakoutGameType : ... { public: private: uint delay; }; a,而不是(n, 1) Numpy ndarray。” p>

起初我认为(n,) vector引用了数组的方向 - 所以它可能引用一列向量而不是只有一行的向量。但后来我不明白为什么我们需要(n,)(n,) - 他们似乎也说同样的话。我知道我误解了一些事情,但我不确定。

供参考(n, 1)是指在被权重和偏差转换以产生下一层激活的输出向量之前,将被输入到神经网络的给定层的激活向量。 / p>

编辑:这个问题在“一列向量”(没有这样的东西)和“一列矩阵”(确实存在)之间徘徊。 “单行向量”和“单行矩阵”相同。

向量只是数字列表,或(等效地)向量空间的基矢量上的标量变换列表。如果它只有一行(或一列),那么当我们将其写出时,矢量可能看起来像一样。令人困惑的是,我们有时会提到“激活矢量”,但实际上意味着“转换激活值的单行矩阵,使其成为单列。”

请注意,在任何一种情况下,我们都不会讨论一维向量,它只是一个由一个数字定义的向量(除非,平均而言,n == 1,在这种情况下,“列”的概念或“行“区分将毫无意义”。

2 个答案:

答案 0 :(得分:4)

(n,)是长度为1的元组,其唯一元素为n。 (语法不是(n),因为它只是n而不是制作元组。)

如果数组具有形状(n,),则表示它是一个沿其唯一维度长度为n的一维数组。它不是行向量或列向量;它没有行或列。它只是一个载体。

答案 1 :(得分:4)

numpy中,数组可以有许多不同的维度,0,1,2等。

典型的2d数组具有维度(n,m)(这是一个Python元组)。我们倾向于将其描述为具有n行,m列。因此,(n,1)数组只有1列,(1,m)有1行。

但是因为一个数组可能只有一个维度,所以可以有一个(n,)形状(1个元素元组的Python表示法:更多信息见here)。

出于多种目的(n,)(1,n)(n,1)数组是等效的(也是(1,n,1,1)(4d))。它们都有n个术语,可以相互重组。

但有时额外的1维度很重要。 (1,m)阵列可以乘以(n,1)阵列以产生(n,m)阵列。一个(n,1)数组可以像a(n,m)一样索引,有2个索引x[:,0],其中a(n,)只接受x[0]

MATLAB矩阵总是2d(或更高)。因此,从MATLAB转移思想的人倾向于期望2个维度。有一个np.matrix子类应该模仿它。

对于numpy程序员来说,向量,行向量,列向量,矩阵之间的区别是松散的,相对不重要。或者使用是从应用程序而不是从numpy本身派生的。我认为这就是这本网络书籍正在发生的事情 - 符号和期望来自numpy之外。

请参阅此答案,了解如何根据ndarrays中存储的数据解释形状。它还提供了有关如何使用.reshapehttps://stackoverflow.com/a/22074424/3277902

的见解