(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 实现的上下文中是啥意思?