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))