在numpy中使用1d和2d矢量的性能/标准



在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连续的。)由于这个原因,没有首选(标准)实践。

您可以根据您的应用程序选择更适合您需求的。

相关内容

  • 没有找到相关文章

最新更新