首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Numpy Vector (N,1)维-> (N,)维转换

Numpy Vector (N,1)维-> (N,)维转换
EN

Stack Overflow用户
提问于 2013-07-26 06:25:59
回答 4查看 73.6K关注 0票数 42

我有一个关于(N,)维数组和(N,1)维数组之间转换的问题。例如,y是(2,)维。

代码语言:javascript
复制
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)维。

代码语言:javascript
复制
x2=x[:,np.newaxis]

y2=np.dot(A,x2)

y2.shape
Out[14]: (2, 1)

将y2转换回y而不进行复制的最有效方法是什么?

谢谢,汤姆

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-26 09:24:01

reshape可以做到这一点

代码语言:javascript
复制
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,)

还要注意,reshape不会复制数据,除非它需要为新形状复制数据(这里不需要这样做):

代码语言:javascript
复制
a.__array_interface__['data']   # (22356720, False)
b.__array_interface__['data']   # (22356720, False)
c.__array_interface__['data']   # (22356720, False)
票数 50
EN

Stack Overflow用户

发布于 2015-04-20 04:22:41

使用numpy.squeeze

代码语言:javascript
复制
>>> x = np.array([[[0], [1], [2]]])
>>> x.shape
(1, 3, 1)
>>> np.squeeze(x).shape
(3,)
>>> np.squeeze(x, axis=(2,)).shape
(1, 3)
票数 19
EN

Stack Overflow用户

发布于 2013-07-26 06:29:51

沿着所需的尺寸切片,如下例所示。要进行相反的操作,您可以使用None作为任何维度的切片,这些维度应该被视为单一维度,但这是使形状工作所必需的。

代码语言:javascript
复制
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)

或者,您可以使用reshape

代码语言:javascript
复制
In [795]: yy.reshape((2,))
Out[795]: array([11,  7])
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17869840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档