1D数组的Numpy转置未给出预期结果

lskq00tm  于 12个月前  发布在  其他
关注(0)|答案(5)|浏览(95)

我尝试了一个非常基本的例子在Python scipy模块中的transpose()方法,但它没有给出预期的结果。我使用的是pylab模式下的ipython。

a = array([1,2,3]
print a.shape
>> (3,)

b = a.transpose()
print b.shape
>> (3,)

如果我打印数组“a”和“B”的内容,它们是相似的。
期望是:(这将导致在转置Matlab)

[1,
  2,
  3]
bfhwhh0e

bfhwhh0e1#

NumPy的transpose()有效地反转了数组的形状。如果数组是一维的,这意味着它没有效果。
在NumPy中,数组

array([1, 2, 3])

array([1,
       2,
       3])

实际上是一样的--它们只是在空白处有所不同。您可能需要的是对应的二维数组,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]])

请注意,对于大多数应用程序,普通的一维数组可以很好地用作行或列向量,但当来自Matlab时,您可能更喜欢使用numpy.matrix

pgx2nnw8

pgx2nnw82#

转置是一维数组的noop。
添加新轴并转置:

>>> a[None].T
array([[1],
       [2],
       [3]])
>>> np.newaxis is None
True

或重塑:

>>> a.reshape(a.shape+(1,))
array([[1],
       [2],
       [3]])

或者正如@Sven Marnach在评论中建议的那样,在末尾添加新的轴:

>>> a[:,None]
array([[1],
       [2],
       [3]])
bmp9r5qi

bmp9r5qi3#

将1D数组整形为2D数组的一种更简洁的方法是:

a = np.array([1,2,3]),  a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))

形状向量中的-1表示“填充任何使其工作的数字”

k4emjkb1

k4emjkb14#

你应该尝试:a = array([[1,2,3]])a = array([[1],[2],[3]]),即a应该是矩阵(行向量,列向量)。

2wnc66cl

2wnc66cl5#

试着把它们放在另一个括号里。它不再是严格的“1D”,因为Numpy现在认为可编辑数组的第一行(某种程度上)。

import numpy

a = numpy.array([[1, 2, 3]])
print(numpy.transpose(a))
>> [[1]
 [2]
 [3]]

相关问题