python - 在最后 2 个维度中旋转 5D 数组

标签 python arrays numpy rotation vectorization

我有一个 5 维数组“a”,大小为 (3,2,2,2,2)。

import numpy as np
a = np.arange(48).reshape(3,2,2,2,2)
a[0,0,0]:
array([[0, 1],
       [2, 3]])

我想做的是将这个 5D 数组旋转 180 度,但只在最后两个维度上旋转,它们的位置没有改变。所以输出 [0,0,0] 应该是这样的:

out[0,0,0]:
array([[3, 2],
       [1, 0]])

我尝试过的:

out = np.rot90(a, 2)
out[0,0,0]:
array([[40, 41],
       [42, 43]])

rot90 函数显然旋转了整个数组。

注意:我想尽可能避免使用 for 循环

最佳答案

要将最后两个轴旋转 180 度,将 axes=(-2, -1) 传递给 np.rot90:

>>> a180 = np.rot90(a, 2, axes=(-2, -1))
>>> a180[0, 0, 0]
array([[3, 2],
       [1, 0]])

如果您的 NumPy 版本没有带 np.rot90axes 参数,则有其他选择。

一种方法是使用索引:

a180 = a[..., ::-1, ::-1]

rot90 翻转数组的 两个轴,因此要使用它,您需要转置(反转轴)、旋转并再次转回.例如:

np.rot90(a.T, 2).T

关于python - 在最后 2 个维度中旋转 5D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614532/

相关文章:

Python - 创建 self 复制的类对象实例

java - 索引越界异常但无法找出问题所在

JavaScript 为数组中不存在的键添加零

python - 如何在 FastAPI 中将字典列表作为 Body 参数发送?

python - 使用 OpenCV 直方图均衡化时遇到问题

c - 好的,作业 : How can X[i] possibly be interpretted the same as i[X] in C?

python - numpy 数组的 numpy 数组 numpy 数组的

python - numpy cumsum() 不起作用?

python - 计算Python pandas中的系列数

python - 集合理解不适用于 Pydev (Python)