首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NumPy使用整形函数对数组进行整形

NumPy使用整形函数对数组进行整形
EN

Stack Overflow用户
提问于 2020-03-30 21:35:02
回答 3查看 419关注 0票数 2

我有一个数组:[1, 2, 3, 4, 5, 6]。我想使用numpy.reshape()函数来结束这个数组:

代码语言:javascript
运行
复制
[[1, 4],
 [2, 5],
 [3, 6]
]

我不知道该怎么做。我总是这样,这不是我想要的:

代码语言:javascript
运行
复制
[[1, 2],
 [3, 4],
 [5, 6]
]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-30 21:41:17

您可以在np.reshape中设置顺序,在您的情况下,您可以使用'F'。详细信息请参见文档

代码语言:javascript
运行
复制
>>> arr
array([1, 2, 3, 4, 5, 6])

>>> arr.reshape(-1, 2, order = 'F')
array([[1, 4],
       [2, 5],
       [3, 6]])
票数 3
EN

Stack Overflow用户

发布于 2020-03-30 21:41:42

它们做同样的事情:

代码语言:javascript
运行
复制
In [57]: np.reshape([1,2,3,4,5,6], (3,2), order='F')                                           
Out[57]: 
array([[1, 4],
       [2, 5],
       [3, 6]])
In [58]: np.reshape([1,2,3,4,5,6], (2,3)).T                                                    
Out[58]: 
array([[1, 4],
       [2, 5],
       [3, 6]])

通常,值在Python/numpy中的行之间“读取”。这是呼叫行-少校或C命令。向下读是'F',用于FORTRAN,在MATLAB中很常见,它有Fortran词根。

如果您接受'F‘命令,创建一个新的副本并将其串出,您将得到一个不同的顺序:

代码语言:javascript
运行
复制
In [59]: np.reshape([1,2,3,4,5,6], (3,2), order='F').copy().ravel()                            
Out[59]: array([1, 4, 2, 5, 3, 6])
票数 4
EN

Stack Overflow用户

发布于 2020-03-30 21:50:15

您得到这个结果的原因是数组通常是按C顺序分配的。这意味着仅靠重塑是不够的。当numpy沿着数组前进时,您必须告诉numpy更改轴的顺序。任何数量的操作都将允许您这样做:

  • 将轴顺序设置为F。F代表Fortran,与MATLAB一样,Fortran通常使用列-主要顺序: a.reshape(2,3,阶=‘F’)
  • 整形后交换轴: np.swapaxes(a.reshape(2,3),0,1)
  • 转接结果: a.reshape(2,3).T
  • 向前滚动第二轴: np.rollaxis(a.reshape(2,3),1)

请注意,除了第一种情况之外,所有的情况都需要您重新调整到转置。

您甚至可以手动安排数据。

代码语言:javascript
运行
复制
np.stack((a[:3], a[3:]), axis=1)

请注意,这将产生许多不必要的副本。如果您想要复制数据,只需执行

代码语言:javascript
运行
复制
a.reshape(2, 3, order='F').copy()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60939903

复制
相关文章

相似问题

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