python - 创建具有序号的 3D NumPy 数组
问题描述
我想创建一个带有序号的 3D NumPy 数组,如下所示:
[[[11 27 43]
[12 28 44]
[13 29 45]
[14 30 46]]
[[15 31 47]
[16 32 48]
[17 33 49]
[18 34 50]]
[[19 35 51]
[20 36 52]
[21 37 53]
[22 38 54]]
[[23 39 55]
[24 40 56]
[25 41 57]
[26 42 58]]]
我这样做了:A = np.arange(11, 59).reshape((4, 4, 3))
但我得到了这个:
[[[11 12 13]
[14 15 16]
[17 18 19]
[20 21 22]]
[[23 24 25]
[26 27 28]
[29 30 31]
[32 33 34]]
[[35 36 37]
[38 39 40]
[41 42 43]
[44 45 46]]
[[47 48 49]
[50 51 52]
[53 54 55]
[56 57 58]]]
所以这不是我想要的顺序。我已经做了一些额外的步骤来获得正确的 3D 阵列。首先,我将数字塑造成一个二维数组:A = np.arange(11, 59).reshape((-1, 4))
得到这个:
[[11 12 13 14]
[15 16 17 18]
[19 20 21 22]
[23 24 25 26]
[27 28 29 30]
[31 32 33 34]
[35 36 37 38]
[39 40 41 42]
[43 44 45 46]
[47 48 49 50]
[51 52 53 54]
[55 56 57 58]]
然后,我拆分并堆叠了 2D 数组,得到了我想要的 3D 数组:A = np.dstack(np.vsplit(A, 3))
[[[11 27 43]
[12 28 44]
[13 29 45]
[14 30 46]]
[[15 31 47]
[16 32 48]
[17 33 49]
[18 34 50]]
[[19 35 51]
[20 36 52]
[21 37 53]
[22 38 54]]
[[23 39 55]
[24 40 56]
[25 41 57]
[26 42 58]]]
现在我想知道是否有更优雅和直接的方法来实现相同的结果。谢谢。
解决方案
获取范围数组,重塑然后排列轴 -
np.arange(11, 59).reshape(3,4,4).transpose(1,2,0)
置换轴的另一种方法是使用np.moveaxis
-
np.moveaxis(np.arange(11, 59).reshape(3,4,4),0,2)
推荐阅读
- node.js - Nodejs数组函数不适用于大型数组
- python - 视频在使用 MovieStim3 制作动画前不久冻结 - PsychoPy
- python - Odoo 12 无法启动自定义模块 - TypeError: unsupported operand type(s) for -: 'tuple' and 'datetime.timedelta'
- c# - 为什么 Environment.OSVersion 突然返回错误的版本?
- python - Plotly:如何使用最近的值,直到有新值可用于处理时间序列中的缺失值?
- deep-learning - yolo_head 在评估模型时给出:属性错误:列表对象没有属性“dtype”
- java - java.sql.SQLXML.free() causing connection leak
- java - Java How to determine the "lost" hour when changing to summertime?
- python - upload files that craw from website to ftp serve
- neo4j - Neo4J Cypher Query find path with nodes that must be in it