您可以简单地使用slicing 来翻转倒数第二个轴,从而将等效的翻转视图放入图像的输入数组中,这样不会在内存中创建任何新数据,因此是一种高效的数据,就像这样 -
images[...,::-1,:]
如果您仍需要制作副本,请在此处使用.copy,它仍然比np.fliplr 更有效,并且对于小型/体面大小的数组很明显。
运行时测试-
似乎 NumPy 是赢家,所以我将用它来测试它。
In [64]: images = np.random.randint(0,255,(3,200,400,3))
In [65]: out1 = np.array([np.fliplr(images[i]) for i in range(3)])
In [66]: out2 = images[...,::-1,:]
In [67]: np.allclose(out1, out2)
Out[67]: True
In [68]: %timeit np.array([np.fliplr(images[i]) for i in range(3)])
1000 loops, best of 3: 1.38 ms per loop
In [69]: %timeit images[...,::-1,:]
1000000 loops, best of 3: 259 ns per loop # virtually free
如果你需要复制 -
In [76]: images = np.random.randint(0,255,(3,10,10,3))
In [77]: %timeit np.array([np.fliplr(images[i]) for i in range(3)])
100000 loops, best of 3: 5.76 µs per loop
In [78]: %timeit images[...,::-1,:].copy()
100000 loops, best of 3: 2.23 µs per loop
In [79]: images = np.random.randint(0,255,(3,100,100,3))
In [80]: %timeit np.array([np.fliplr(images[i]) for i in range(3)])
10000 loops, best of 3: 159 µs per loop
In [81]: %timeit images[...,::-1,:].copy()
10000 loops, best of 3: 152 µs per loop