Numpy转置不给出预期的结果

sar*_*jit 20 python numpy scipy

我在Python scipy模块中尝试了一个非常基本的示例,用于转置方法,但没有给出预期的结果.我在pylab模式下使用Ipython.

a = array([1,2,3]
print a.shape
>> (3,)
b = a.transpose()
print b.shape
>> (3,)
Run Code Online (Sandbox Code Playgroud)

如果我打印数组"a"和"b"的内容,它们是相似的.

期望是:(这将导致Matlab om转置)

 [1,
  2,
  3]
Run Code Online (Sandbox Code Playgroud)

jfs*_*jfs 25

Transpose是一维数组的noop.

添加新轴并转置:

>>> a[None].T
array([[1],
       [2],
       [3]])
>>> np.newaxis is None
True
Run Code Online (Sandbox Code Playgroud)

或重塑:

>>> a.reshape(a.shape+(1,))
array([[1],
       [2],
       [3]])
Run Code Online (Sandbox Code Playgroud)

或者@Sven Marnach在评论中建议,最后添加新轴:

>>> a[:,None]
array([[1],
       [2],
       [3]])
Run Code Online (Sandbox Code Playgroud)


Sve*_*ach 23

NumPy transpose()有效地逆转了阵列的形状.如果数组是一维的,这意味着它没有效果.

在NumPy中,数组

array([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

array([1,
       2,
       3])
Run Code Online (Sandbox Code Playgroud)

实际上是相同的 - 它们只在空白方面有所不同.你可能想要的是相应的二维数组,为此transpose()工作正常.还要考虑使用NumPy的matrix类型:

In [1]: numpy.matrix([1, 2, 3])
Out[1]: matrix([[1, 2, 3]])

In [2]: numpy.matrix([1, 2, 3]).T
Out[2]: 
matrix([[1],
        [2],
        [3]])
Run Code Online (Sandbox Code Playgroud)

请注意,对于大多数应用程序,简单的一维数组可以作为行或列向量正常工作,但是当来自Matlab时,您可能更喜欢使用numpy.matrix.

  • `matrix`的行为与`array`完全不同.它造成了混乱.切断电源线并以"array"开头可能更好. (4认同)

von*_*hev 5

你应该尝试:a = array([[1,2,3]])或者a = array([[1],[2],[3]]),也就是说,a应该是一个矩阵(行向量,列向量).


Mar*_*ers 5

将1D阵列重塑为2D阵列的更简洁方法是:

a = np.array([1,2,3]),  a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))
Run Code Online (Sandbox Code Playgroud)

形状向量中的-1表示"填写任何数字使这项工作"