在NumPy中是否有将向量表示为1d或2d ndarray的标准实践?我正在从MATLAB移动,它将向量表示为2d数组。
根据我的经验,1D是numpy中向量的标准。将n
元素的向量保持为形状为(1, n)
或(n, 1)
的二维数组的唯一好理由是在线性代数上下文中,您希望保持行和列向量的微分。正如EitanT在他现在删除的答案中所暗示的那样,你可能会想要使用numpy的matrix
类型,除了单个元素访问外,它保持2D形状的返回,例如,如果a
具有形状(m, n)
,那么a[0]
具有形状(n,)
类型ndarray
,但形状(1, n)
类型matrix
,尽管a[0, 0]
在两种情况下都返回一个标量。
如果你坚持使用形状为(n,)
的1D矢量,你可以在飞行中重塑需要2D形状的特定操作:
a.reshape(-1, 1) # shape (n, 1)
a[:, None] # shape (n, 1)
a.reshape(1, -1) # shape (1, n)
a[None, :] # shape (1, n)
Numpy将自动重塑你的1D矢量形状(1, n)
广播时,它涉及一个2D数组的操作
在matlab中(出于历史原因,我认为)基本类型是M
-by- N
数组(矩阵),因此标量是1-by-1数组和向量N
-by-1或1-by- N
数组。(内存布局始终为Fortran风格)。
这个"限制"在numpy
中不存在:你有真正的标量,ndarray
可以有你喜欢的许多维度。(内存布局可以是C或fortran连续的。)由于这个原因,没有首选(标准)实践。