Python Numpy向量(N,1)维->;(N,)维转换
关于(N,)维数组和(N,1)维数组之间的转换,我有一个问题。例如,y是(2,)维Python Numpy向量(N,1)维->;(N,)维转换,python,arrays,numpy,Python,Arrays,Numpy,关于(N,)维数组和(N,1)维数组之间的转换,我有一个问题。例如,y是(2,)维 A=np.array([[1,2],[3,4]]) x=np.array([1,2]) y=np.dot(A,x) y.shape Out[6]: (2,) 但下面将显示y2是(2,1)维 x2=x[:,np.newaxis] y2=np.dot(A,x2) y2.shape Out[14]: (2, 1) 在不复制的情况下,将y2转换回y的最有效方法是什么 谢谢, Tom沿所需的尺寸切片,如下例所
A=np.array([[1,2],[3,4]])
x=np.array([1,2])
y=np.dot(A,x)
y.shape
Out[6]: (2,)
但下面将显示y2是(2,1)维
x2=x[:,np.newaxis]
y2=np.dot(A,x2)
y2.shape
Out[14]: (2, 1)
在不复制的情况下,将y2转换回y的最有效方法是什么
谢谢,
Tom沿所需的尺寸切片,如下例所示。若要反向操作,可以使用
None
作为任何标注的切片,这些标注应被视为单一标注,但这是使形状正常工作所必需的
In [786]: yy = np.asarray([[11],[7]])
In [787]: yy
Out[787]:
array([[11],
[7]])
In [788]: yy.shape
Out[788]: (2, 1)
In [789]: yy[:,0]
Out[789]: array([11, 7])
In [790]: yy[:,0].shape
Out[790]: (2,)
In [791]: y1 = yy[:,0]
In [792]: y1.shape
Out[792]: (2,)
In [793]: y1[:,None]
Out[793]:
array([[11],
[7]])
In [794]: y1[:,None].shape
Out[794]: (2, 1)
或者,您可以使用重塑
:
In [795]: yy.reshape((2,))
Out[795]: array([11, 7])
为这个工作
a = np.arange(3) # a.shape = (3,)
b = a.reshape((3,1)) # b.shape = (3,1)
b2 = a.reshape((-1,1)) # b2.shape = (3,1)
c = b.reshape((3,)) # c.shape = (3,)
c2 = b.reshape((-1,)) # c2.shape = (3,)
还请注意,重塑
不会复制数据,除非它需要为新形状复制数据(这里不需要这样做):
相反的翻译可通过以下方式进行:
np.atleast_2d(y).T
使用:
当数据的维度未知或在获取适当维度时遇到太多困难时,这种方法更合适。
np.atleast_2d(y).T
>>> x = np.array([[[0], [1], [2]]])
>>> x.shape
(1, 3, 1)
>>> np.squeeze(x).shape
(3,)
>>> np.squeeze(x, axis=(2,)).shape
(1, 3)