Python numpy can';t将行向量转置到列?

Python numpy can';t将行向量转置到列?,python,numpy,matrix,vector,transpose,Python,Numpy,Matrix,Vector,Transpose,numpy似乎无法转置向量? 我想把一个向量投影到一个矩阵中,你可以用它来处理行,使用np.tile没有问题- In [7]: vector = np.arange(start=0,stop=1,step=1.0/5) In [8]: mat = np.tile(vector, (2,1)) In [9]: mat Out[9]: array([[ 0. , 0.2, 0.4, 0.6, 0.8], [ 0. , 0.2, 0.4, 0.6,

numpy似乎无法转置向量? 我想把一个向量投影到一个矩阵中,你可以用它来处理行,使用np.tile没有问题-

In [7]: vector = np.arange(start=0,stop=1,step=1.0/5)
In [8]: mat = np.tile(vector, (2,1))   
In [9]: mat
Out[9]: array([[ 0. ,  0.2,  0.4,  0.6,  0.8],
               [ 0. ,  0.2,  0.4,  0.6,  0.8]])
但是,如果您想将同一向量平铺为列,那么似乎必须这样做

In[11]: mat = np.tile(vector,(2,1))
In[12]: mat=mat.transpose()
In[13]: mat
Out[13]: array([[ 0. ,  0. ],
                 [ 0.2,  0.2],
                 [ 0.4,  0.4],
                 [ 0.6,  0.6],
                 [ 0.8,  0.8]])
而不是更合乎逻辑的(对我来说)

它不会给出期望的结果,而是给出一个行向量,转置是不相关的-

Out[31]: array([[ 0. ,  0.2,  0.4,  0.6,  0.8,  0. ,  0.2,  0.4,  0.6,  0.8]])

虽然这不是一个大问题,但我担心它的不公正性

转置
在1d阵列上实际上没有任何作用。另一种方法是,首先将向量重塑为2d,从中获得两个轴,然后可以使用
np.tile
,并为每个轴指定reps参数:

np.tile(vector[:,None], (1,2))
#array([[ 0. ,  0. ],
#       [ 0.2,  0.2],
#       [ 0.4,  0.4],
#       [ 0.6,  0.6],
#       [ 0.8,  0.8]])

转置
在1d数组上实际上没有任何作用。另一种方法是,首先将向量重塑为2d,从中获得两个轴,然后可以使用
np.tile
,并为每个轴指定reps参数:

np.tile(vector[:,None], (1,2))
#array([[ 0. ,  0. ],
#       [ 0.2,  0.2],
#       [ 0.4,  0.4],
#       [ 0.6,  0.6],
#       [ 0.8,  0.8]])
从project
/
kill

from numpy.lib.stride_tricks import as_strided as strided

strided(vector, (vector.size, 2), (vector.strides[0], 0))

array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])
__

从project
/
kill

from numpy.lib.stride_tricks import as_strided as strided

strided(vector, (vector.size, 2), (vector.strides[0], 0))

array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])
__


有很多方法可以创建这样的数组

重复
平铺
快,
重塑
几乎没有成本:

In [112]: v=np.arange(0,1,1/5)
In [113]: v
Out[113]: array([ 0. ,  0.2,  0.4,  0.6,  0.8])
In [114]: np.repeat(v,2)
Out[114]: array([ 0. ,  0. ,  0.2,  0.2,  0.4,  0.4,  0.6,  0.6,  0.8,  0.8])
In [115]: np.repeat(v,2).reshape(-1,2)
Out[115]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])
或者使用
newaxis
v
转换为“列向量”:

In [118]:  np.repeat(v[:,None],2,axis=1)
Out[118]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])

In [119]: v[:,None]+np.zeros(2)
Out[119]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])

In [120]: np.column_stack([v]*2)
Out[120]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])

In [124]: np.broadcast_to(v[:,None],(v.shape[0],2))
Out[124]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])
最后一个实际上是
@piRSquared的
跨步技巧:

In [125]: _.strides
Out[125]: (8, 0)

v[:,None]
也可以使用
v[None,:]生成。T
(或
v[None].T

创建这样的数组有很多方法

重复
平铺
快,
重塑
几乎没有成本:

In [112]: v=np.arange(0,1,1/5)
In [113]: v
Out[113]: array([ 0. ,  0.2,  0.4,  0.6,  0.8])
In [114]: np.repeat(v,2)
Out[114]: array([ 0. ,  0. ,  0.2,  0.2,  0.4,  0.4,  0.6,  0.6,  0.8,  0.8])
In [115]: np.repeat(v,2).reshape(-1,2)
Out[115]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])
或者使用
newaxis
v
转换为“列向量”:

In [118]:  np.repeat(v[:,None],2,axis=1)
Out[118]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])

In [119]: v[:,None]+np.zeros(2)
Out[119]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])

In [120]: np.column_stack([v]*2)
Out[120]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])

In [124]: np.broadcast_to(v[:,None],(v.shape[0],2))
Out[124]: 
array([[ 0. ,  0. ],
       [ 0.2,  0.2],
       [ 0.4,  0.4],
       [ 0.6,  0.6],
       [ 0.8,  0.8]])
最后一个实际上是
@piRSquared的
跨步技巧:

In [125]: _.strides
Out[125]: (8, 0)

v[:,None]
也可以用
v[None,:]生成。T
(或
v[None].T

@jeremy_rutman:利用这一点,你可能只需要使用
vector[:,None]
而不用
np.tile(vector[:,None],(1,2))显式平铺
@jeremy_rutman:利用这一点,您可能只需要使用
向量[:,无]
而不是显式地使用
np.tile(向量[:,无],(1,2))
。转置切换维度。对于一维数组,这意味着将一维与一维切换。转置将切换维度。对于一维数组,这意味着将一维与一维切换。