在NumPy中是否存在将向量表示为1d或2d ndarray的标准做法?我正在从代表向量的MATLAB转移到2d数组。
答案 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。)因此,没有首选(标准)实践。根据您的申请,您可以选择最适合您需求的那个。