来自Matlab/Octave的背景,我一直在努力学习numpy.反复绊倒的一件事是矢量和多维数组之间的区别.对于这个问题,我给我有一个特定的问题,但我会非常感激,如果有人也可以解释numpy的一维数组背后的更一般的画面,为什么你会希望他们摆在首位,如何在混合单维和多维数组等时避免麻烦.无论如何,问题是:
我有一个名为X的二维数组:
X = numpy.arange(10).reshape(2,5)
Run Code Online (Sandbox Code Playgroud)
我想取X的最后一列并将其存储为另一个名为Y的二维数组(即列向量).我能够为此提供的唯一方法是:
Y = numpy.atleast_2d(X[:,4]).T
Run Code Online (Sandbox Code Playgroud)
但由于以下几个原因,我不喜欢这样:
当X [:,4]中隐含方向时,我觉得我不应该告诉它转置矢量.
使用atleast_2D在代码中反复使用似乎非常麻烦,这种情况会出现很多.感觉我做错了什么.
那么,简而言之,有更好的方法吗?
谢谢.
我在Python中使用NumPy来处理数组.这是我用来创建垂直数组的方式:
import numpy as np
a = np.array([[1],[2],[3]])
Run Code Online (Sandbox Code Playgroud)
是否有一种简单而直接的方法来创建垂直数组?
如何将(5,)numpy数组转换为(5,1)?
以及如何从(5,1)向后转换为(5,)?
(5,)数组的用途是什么,为什么省略一维?我的意思是为什么我们不总是使用(5,1)形式?
这是否仅在1D和2D数组上发生,还是在3D数组上发生,例如(2,3,)数组可以存在吗?
更新:
我设法通过(5,)转换为(5,1)
a= np.reshape(a, (a.shape[0], 1))
Run Code Online (Sandbox Code Playgroud)
但建议的变体看起来更简单:
a = a[:, None] or a = a[:, np.newaxis]
Run Code Online (Sandbox Code Playgroud)
要将(5,1)转换为(5,),可以使用np.ravel
a= np.ravel(a)
Run Code Online (Sandbox Code Playgroud)