我尝试过搜索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,在这种情况下,“列”的概念或“行“区分将毫无意义”。
答案 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
中存储的数据解释形状。它还提供了有关如何使用.reshape
:https://stackoverflow.com/a/22074424/3277902