根据我的经验,对于向量来说,numpy中1D是常见的。将包含n个元素的向量保留为形状为(1,n)或(n,1)的2D数组的唯一好处是在线性代数上下文中,您想要区分行向量和列向量。正如EitanT在他现已删除的答案中所暗示的那样,您可能希望使用numpy的"matrix"类型,它保留了返回的2D形状,除了单个元素访问,例如如果"a"的形状为(m,n),则对于类型为"ndarray"的"a[0]"具有形状"(n,)",但对于类型为"matrix"的"a[0]"具有形状"(1,n)",尽管"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将自动调整您的一维向量形状为(1, n),当它与涉及到2D数组的操作进行广播时。请参考广播文档。
在Matlab中(出于历史原因,我会这样认为),基本类型是一个M×N数组(矩阵),因此标量是1×1数组,向量可以是N×1或1×N数组。(内存布局始终为Fortran风格)。在NumPy中不存在这种“限制”:您有真正的标量,ndarray可以具有任意多个维度。(内存布局可以是C或Fortran连续的。)因此,没有首选(标准)做法。根据您的应用程序,选择最适合您需求的那个。