Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 1D数组的Numpy转置未给出预期结果_Python_Numpy_Scipy_Transpose - Fatal编程技术网

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

Python 1D数组的Numpy转置未给出预期结果,python,numpy,scipy,transpose,Python,Numpy,Scipy,Transpose,我正在为transpose()方法在Python scipy模块中尝试一个非常基本的示例,但没有给出预期的结果。我在pylab模式下使用Ipython a = array([1,2,3] print a.shape >> (3,) b = a.transpose() print b.shape >> (3,) 如果我打印数组“a”和“b”的内容,它们是相似的 期望值为:(这将在Matlab转置中产生) 您应该尝试:a=array([[1,2,3]])或a=array(

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

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

b = a.transpose()
print b.shape
>> (3,)
如果我打印数组“a”和“b”的内容,它们是相似的

期望值为:(这将在Matlab转置中产生)


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

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

在NumPy中,数组

array([1, 2, 3])

实际上是一样的——它们只是在空白处有所不同。您可能需要的是相应的二维数组,
transpose()。还考虑使用NUMPY的代码>矩阵< /代码>类型:

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。矩阵

转置是一维数组的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]])

将一维阵列重塑为二维阵列的更简洁的方法是:

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

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

而不是在开头添加一个轴并进行换位,我通常更喜欢在结尾添加新的轴:
a[:,None]
将在一步中给出所需的结果。要概括更高的维度,使用@SvenMarnach的思想,您可以执行
a[…,None]
。行
np.newaxis是None
的目的是什么?@stackoverflowuser2010:确认
None
np.newaxis
在这种情况下的另一个名称(我更喜欢
None
,但其他人可能认为
np.newaxis
在这种情况下更好).
matrix
的行为与
array
不完全一样。它会造成混乱。最好切断电源线,从
array
@J.F.Sebastian开始。事实上,它的行为不同正是我提到它的原因,因为这种行为更接近Matlab用户的习惯。我很少使用
matrix
类,但有时我觉得它很方便。最近我不得不使用一个函数(来自
sklearn
)在其输入上调用.shape来决定功能和样本的数量。因此,对于我的数据,它明确要求输入数组为shape(5,1),而不是(1,5),以便执行我想要的操作。在这种情况下,
矩阵
将起作用,
数组
将不起作用-除非有办法处理数组?类似:
>>> a[:,None]
array([[1],
       [2],
       [3]])
a = np.array([1,2,3]),  a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))