gpt4 book ai didi

python - 在 NumPy 中反转 3D 矩阵的所有子矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:51 25 4
gpt4 key购买 nike

我有一个3x5x5“矩阵”(实际上是一个3D numpy.ndarray)。为了进行一些计算,我必须首先反转这个 3D 数组的每个子数组,如下所示:

>>> x = np.arange(75).reshape(3, 5, 5)
>>> x
array([[[ 0, 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, 46, 47, 48, 49]],

[[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59],
[60, 61, 62, 63, 64],
[65, 66, 67, 68, 69],
[70, 71, 72, 73, 74]]])

>>> np.array([ np.rot90(k, 2) for k in x ])
array([[[ 24., 23., 22., 21., 20.],
[ 19., 18., 17., 16., 15.],
[ 14., 13., 12., 11., 10.],
[ 9., 8., 7., 6., 5.],
[ 4., 3., 2., 1., 0.]],

[[ 49., 48., 47., 46., 45.],
[ 44., 43., 42., 41., 40.],
[ 39., 38., 37., 36., 35.],
[ 34., 33., 32., 31., 30.],
[ 29., 28., 27., 26., 25.]],

[[ 74., 73., 72., 71., 70.],
[ 69., 68., 67., 66., 65.],
[ 64., 63., 62., 61., 60.],
[ 59., 58., 57., 56., 55.],
[ 54., 53., 52., 51., 50.]]])

如您所见,我找到了一个最初似乎运行良好的解决方案(使用np.rot90)。然而,在对较大输入进行测试时,此方法变得非常慢,尤其是当第一个维度超过 100 时。是否有更快/更有效的方法来做到这一点?

谢谢!

最佳答案

只需沿着轴 1,2 反转即可,从而避免循环并希望在那里获得一些性能提升。因此,可以像这样简单地实现所需的输出 -

x[:,::-1,::-1]

关于python - 在 NumPy 中反转 3D 矩阵的所有子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38380471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com