(n,) 在 numpy 和向量的上下文中是啥意思?

Posted

技术标签:

【中文标题】(n,) 在 numpy 和向量的上下文中是啥意思?【英文标题】:What does (n,) mean in the context of numpy and vectors?(n,) 在 numpy 和向量的上下文中是什么意思? 【发布时间】:2017-01-29 00:24:50 【问题描述】:

我尝试过搜索 ***、谷歌搜索,甚至使用 symbolhound 进行字符搜索,但无法找到答案。具体来说,我对Ch感到困惑。 Nielsen 的 Neural Networks and Deep Learning 中的第 1 篇,他说“假设输入 a(n, 1) Numpy ndarray,而不是 (n,) vector。”

起初我认为(n,) 指的是数组的方向 - 所以它可能指的是单列向量,而不是只有一行的向量。但是我不明白为什么我们需要(n,)(n, 1) 两者——他们似乎在说同样的话。我知道我误解了一些东西,但我不确定。

供参考a 是指将输入到神经网络的给定层的激活向量,然后通过权重和偏差进行转换以生成下一层的激活输出向量。

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

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

请注意,在这两种情况下,我们都不是在讨论一维向量,它是一个仅由一个数字定义的向量(除非通常 n==1,在这种情况下,“列”或“行”的区别是没有意义的)。

【问题讨论】:

我看到你还没有习惯实际一维向量的想法,而不是单行或单列矩阵。 【参考方案1】:

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

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

但由于数组可能只有 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) 数组可以像 (n,m) 一样被索引,有 2 个索引,x[:,0],其中 (n,) 只接受 x[0]

MATLAB 矩阵始终为 2d(或更高)。因此,从 MATLAB 转移思想的人往往期望二维。有一个 np.matrix 子类应该模仿它。

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

有关如何解释与存储在ndarrays 中的数据相关的形状,也请参阅此答案。它还提供了有关如何使用 .reshape: https://***.com/a/22074424/3277902 的见解

【讨论】:

【参考方案2】:

(n,) 是一个长度为 1 的元组,其唯一元素是 n。 (语法不是(n),因为那只是n,而不是创建一个元组。)

如果数组的形状为(n,),这意味着它是一个一维数组,沿其唯一维度的长度为n。它不是行向量或列向量;它没有行或列。它只是一个向量。

【讨论】:

以上是关于(n,) 在 numpy 和向量的上下文中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

-> 在这个函数调用的上下文中是啥意思? [复制]

__global__ 在 c 中函数声明的上下文中是啥意思?

org.osgi.framework.storage.clean=onFirstInit 在 Apache Felix OSGi 实现的上下文中是啥意思?

波浪号大于 (~>) 在 Ruby gem 依赖项中是啥意思? [复制]

(*var)[n] 在 C++ 中是啥意思

残差是啥意思?