【问题标题】:How to reshape a 3D array如何重塑 3D 数组
【发布时间】:2023-04-05 15:33:01
【问题描述】:

我是 python 世界的新手。我需要帮助来解决问题。我需要重塑一个 3D 数组。 这是一个例子: 我有:

[[[ 1 16 31]
  [ 2 17 32]
  [ 3 18 33]
  [ 4 19 34]
  [ 5 20 35]]

 [[ 6 21 36]
  [ 7 22 37]
  [ 8 23 38]
  [ 9 24 39]
  [10 25 40]]

 [[11 26 41]
  [12 27 42]
  [13 28 43]
  [14 29 44]
  [15 30 45]]]

我需要重塑它:

[[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [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]]]

感谢您的帮助!

【问题讨论】:

  • 到目前为止你尝试过什么?你有什么想法?

标签: python arrays numpy reshape


【解决方案1】:

用爱因斯坦符号切换轴

np.einsum("ijk->kij", arr)

这是一个很好的介绍Einstein Summation in Numpy

【讨论】:

  • 通常我们使用transpose来执行这种切换。
  • 你说得对,我不记得函数了。 arr.transpose(2, 0, 1) 效果很好。
  • Timings 和__array_interface__ 值表明einsum 方法与transpose 做同样的事情,但只是增加了一点函数开销。因此,如果语法更容易记住,请使用它。
猜你喜欢
  • 2017-11-11
  • 2016-02-10
  • 2021-08-06
  • 2021-02-25
  • 2014-12-27
  • 2020-05-12
  • 2021-10-14
  • 2017-09-18
  • 2020-04-22
相关资源
最近更新 更多