三维numpy阵列的高效变换

2024-03-29 08:50:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些三维数字阵列,需要以各种方式进行转换。E、 g.:

x.shape = (4, 17, 17)

这个数组是4个平面的1个样本,每个平面的大小为17x17。变换每个平面的最有效方法是什么:flipud、fliplr和rot90?有比使用for循环更好的方法吗?谢谢!在

^{pr2}$

Tags: 方法for方式数字数组平面样本shape
1条回答
网友
1楼 · 发布于 2024-03-29 08:50:41

看看这些函数的代码:

def fliplr(...):
   ....
   return m[:, ::-1]

换句话说,它返回一个在第二维度上具有反向切片的视图

您的x[p, :, :] = np.fliplr(x[p, :, :]将反向切片应用于最后一个维度,因此整个数组的等效值应该是

^{pr2}$

翻转第二个轴

^{3}$

等等

np.rot90有4个大小写(k);对于k=1来说是

return fliplr(m).swapaxes(0, 1)

换句话说m[:, ::-1].swapaxes(0,1)

在你的飞机上工作你会做一些

m[:, :,::-1].swapaxes(1,2)

或者你可以先做swapaxes/transpose

m.transpose(0,2,1)[:, :, ::-1]

你有足够的工具来改变飞机的形状吗?在

正如我在最近的另一个问题https://stackoverflow.com/a/41291462/901925中所讨论的,flip...返回一个视图,但是使用flip和swap的{}很可能会返回一个副本。不管怎样,numpy都将为您提供最有效的版本。在

相关问题 更多 >