我有一个numpy矩阵'mat',它是888 * 100 * 100.这代表了100个100个网格的888个样本。多维numpy矩阵的旋转和翻转
我想在矩阵中应用一个转换到每个网格。
我试图mod_mat = np.rot90(垫),但它改变了尺寸100 * 888 * 100
有一气呵成进行转换的方法吗?或者,是否需要遍历每个网格并分别进行转换?谢谢。
我有一个numpy矩阵'mat',它是888 * 100 * 100.这代表了100个100个网格的888个样本。多维numpy矩阵的旋转和翻转
我想在矩阵中应用一个转换到每个网格。
我试图mod_mat = np.rot90(垫),但它改变了尺寸100 * 888 * 100
有一气呵成进行转换的方法吗?或者,是否需要遍历每个网格并分别进行转换?谢谢。
np.rot90首先旋转两个维度,因此您可以交换轴0和2,旋转并换回以达到您想要的效果。 Python迭代可能会更慢,因为numpy是一个高度优化的低级代码库,所以通常使用内置插件更好。
In[9]: import numpy as np
In[10]: x = np.arange(3*2*2).reshape(3, 2, 2)
In[11]: x
Out[11]:
array([[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11]]])
In[12]: np.rot90(x.swapaxes(0, 2)).swapaxes(0, 2)
Out[12]:
array([[[ 2, 0],
[ 3, 1]],
[[ 6, 4],
[ 7, 5]],
[[10, 8],
[11, 9]]])
下面是使用transpose
和flipping/reversing
最后轴的方法 -
mat.transpose(0,2,1)[...,::-1]
运行测试 -
In [10]: a = np.random.rand(888 , 200 , 200) # Input array
In [11]: %timeit np.rot90(a.swapaxes(0, 2)).swapaxes(0, 2) # @Wolfram's soln
100000 loops, best of 3: 3.87 µs per loop
In [12]: %timeit a.transpose(0,2,1)[...,::-1]
1000000 loops, best of 3: 940 ns per loop