5

在 NumPy 中是否有将向量表示为 1d 或 2d ndarray 的标准做法?我正在从将向量表示为二维数组的 MATLAB 中迁移出来。

4

2 回答 2

3

以我的经验,一维是向量的 numpy 规范。n将元素向量保留为 2D 形状数组(1, n)或在线性代数上下文中的唯一充分理由(n, 1),您希望在其中保持行向量和列向量的区分。正如 EitanT 在他现在已删除的答案中所暗示的那样,您可能会想要使用 numpy 的matrix类型,除了单个元素访问之外,它保持返回的 2D 形状,例如,如果a有形状,(m, n)a[0]有形状(n,)用于 type ndarray,但 shape(1, n)用于 type matrix,虽然a[0, 0]返回一个标量在这两种情况下。

如果您坚持使用 shape 的 1D 向量(n,),则可以即时重塑形状以进行需要 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)

(1, n)Numpy 会在广播它以进行涉及 2D 数组的操作时自动将您的 1D 向量重新整形为形状。

于 2013-01-02T17:53:00.650 回答
1

在 matlab 中(出于历史原因,我认为)基本类型是一个M数组N(矩阵),因此标量是 1×1 数组和向量,可以是N1×1 或 1×1N数组。(内存布局始终是 Fortran 风格)。

这个“限制”不存在于numpy:你有真正的标量,并且ndarray' 可以有你喜欢的任意多的维度。(内存布局可以是 C 或 Fortran 连续的。)因此,没有首选(标准)实践。您可以根据您的应用选择更适合您需求的应用。

于 2013-01-02T17:55:23.517 回答