如何解决脾气暴躁的重塑?
我试图找出一个棘手的Numpy重塑问题。我尝试将其尽可能地煮沸。
假设我有一个形状为X
的数组(6,2)
,如下所示:
import numpy as np
X = np.array([[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]])
我想将其重塑为形状为(3,2,2)
的数组,所以我这样做:
X.reshape(3,2)
得到了:
array([[[ 1,[ 3,4]],[[ 5,[ 7,8]],[[ 9,12]]])
但是,我需要其他格式的数据。确切地说,我想结束:
array([[[ 1,[[ 3,[ 9,10]],12]]])
我该使用reshape
还是其他?在Numpy中执行此操作的最佳方法是什么?
解决方法
您必须设置订购选项:
>>> X.reshape(3,2,order='F')
array([[[ 1,2],[ 7,8]],[[ 3,4],[ 9,10]],[[ 5,6],[11,12]]])
“ F”表示使用类似于Fortran的索引顺序读取/写入元素,第一个索引更改最快,最后一个索引更改最快。
请参阅:https://numpy.org/doc/stable/reference/generated/numpy.reshape.html
,您需要指定订单;
X.reshape(3,order='F')
应该工作
,等效于order='F'
重塑的功能:
In [31]: x.reshape(2,3,2).transpose(1,2)
Out[31]:
array([[[ 1,12]]])
In [32]: x.reshape(2,2).strides
Out[32]: (16,48,8)
如果没有移调,步幅将是(48,16,8)。
关于此布局的一点点棘手的是,最后一个尺寸保持为“ C”顺序。只是切换的前两个维度。
完整的“ F”布局为
In [33]: x = np.arange(1,13).reshape(3,order='F')
In [34]: x
Out[34]:
array([[[ 1,7],[ 4,[[ 2,8],[ 5,11]],9],[ 6,12]]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。