在numpy中使用1d vs 2d向量的性能/标准

时间:2013-01-02 17:14:13

标签: python matlab numpy linear-algebra

在NumPy中是否存在将向量表示为1d或2d ndarray的标准做法?我正在从代表向量的MATLAB转移到2d数组。

2 个答案:

答案 0 :(得分:3)

根据我的经验,1D是矢量numpy的常态。将n元素的向量保持为形状(1, n)(n, 1)的2D数组的唯一理由是在线性代数上下文中,您希望保持行和列向量的不同。正如EitanT暗示他现在删除的答案,你可能会想要使用numpy的matrix类型,除了单个元素访问之外,它保持2D形状的返回,例如a具有形状{ {1}}然后(m, n)a[0]类型的形状(n,),但对ndarray类型形成(1, n),尽管matrix返回标量两种情况。

如果您坚持使用形状a[0, 0]的一维矢量,您可以动态重塑以进行需要2D形状的特定操作:

(n,)

对于涉及2D阵列的操作,Numpy将自动重塑您的1D向量以对a.reshape(-1, 1) # shape (n, 1) a[:, None] # shape (n, 1) a.reshape(1, -1) # shape (1, n) a[None, :] # shape (1, n) 进行整形{<1}}。

答案 1 :(得分:1)

在matlab中(由于历史原因,我认为)基本类型是M - by - N数组(矩阵),因此标量是1对1的数组和向量{{ 1}} - by-1或1-by-N数组。 (内存布局总是Fortran风格)。

N中没有此“限制”:您拥有真正的标量,numpy可以包含您喜欢的任意维度。 (内存布局可以是C或Fortran-contigous。)因此,没有首选(标准)实践。根据您的申请,您可以选择最适合您需求的那个。