首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建具有序列号的3D NumPy数组

创建具有序列号的3D NumPy数组
EN

Stack Overflow用户
提问于 2019-01-14 23:08:07
回答 1查看 292关注 0票数 2

我想创建一个具有如下序列号的3D NumPy数组:

代码语言:javascript
复制
[[[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)),但我得到的结果是:

代码语言:javascript
复制
[[[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)),以获得以下结果:

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

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

现在我想知道是否有更优雅和直接的方法来达到同样的结果。谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-14 23:13:03

获取射程数组,调整形状,然后置换轴-

代码语言:javascript
复制
np.arange(11, 59).reshape(3,4,4).transpose(1,2,0)

另一种置换轴的方法是使用np.moveaxis -

代码语言:javascript
复制
np.moveaxis(np.arange(11, 59).reshape(3,4,4),0,2)

Discussion : A general intuition to solving such problems.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54184055

复制
相关文章

相似问题

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