python - 使用自定义排序进行 Numpy 重塑
问题描述
有没有办法对不是“C”或“F”的重塑功能进行自定义订单?
我想通过首先更改第二个索引,然后更改第三个索引,最后更改第一个索引来获取一个平面数组并使其成为 3 维数组?
例如像
a = np.arange(12).reshape((2, 2, 3), (2, 3, 1)) # Second parameter not real numpy
导致:
a[:,:,0] = [[0, 1], [6, 7]]
a[:,:,1] = [[2, 3], [8, 9]]
a[:,:,2] = [[4, 5], [10, 11]]
这似乎是非常普通的功能,但我似乎无法找到一种方法来做到这一点,而无需自己在循环中手动重塑它,这是不可取的。
谢谢你的帮助!
解决方案
首先,你生产了什么?
In [127]: a = np.zeros((2,2,2),int)
In [128]: a = np.zeros((2,2,3),int)
In [129]: a[:,:,0] = [[0, 1], [6, 7]]
...: a[:,:,1] = [[2, 3], [8, 9]]
...: a[:,:,2] = [[4, 5], [10, 11]]
In [130]: a
Out[130]:
array([[[ 0, 2, 4],
[ 1, 3, 5]],
[[ 6, 8, 10],
[ 7, 9, 11]]])
现在让我们尝试向后工作:
简单的重塑没有帮助:
In [131]: a.reshape(2,6)
Out[131]:
array([[ 0, 2, 4, 1, 3, 5],
[ 6, 8, 10, 7, 9, 11]])
但转置最后两个轴:
In [132]: a.transpose(0,2,1)
Out[132]:
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]]])
In [133]: a.transpose(0,2,1).reshape(2,6)
Out[133]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
所以在前进的方向:
In [135]: np.arange(12).reshape(2,3,2).transpose(0,2,1)
Out[135]:
array([[[ 0, 2, 4],
[ 1, 3, 5]],
[[ 6, 8, 10],
[ 7, 9, 11]]])
推荐阅读
- java - 有没有办法找到文本中所有模式的出现,而不是在 Boyer Moore 算法中找到第一次出现
- c# - 控制台应用程序 .Net Core TaskScheduler Windows Server 2016
- angular - 如何在树的数据源更改之前在 mat-tree 中使用 Angular Animation 进行淡出动画
- python-3.x - 是否可以使用 python 从旧网站版本中提取信息?
- selenium-webdriver - 如果设置方法中发生错误,则 Allure 报告中缺少规范
- notifications - 如何在检索通知时过滤掉以前看过和阅读的活动?
- android - 如何将 api 数据保存在从片段二到片段一的片段返回堆栈中单击后退按钮
- javascript - 移动屏幕上的粘性删除
- r-markdown - R Markdown 双倍行距
- autodesk-forge - GET 版本/:version_id/relationships/ref 响应中缺少存储关系:autodesk.bim360:Document