numpy 反向多维数组

问题描述 投票:0回答:3

numpy 中反转数组最内部值的最简单方法是什么:

array([[[1, 1, 1, 2],
    [2, 2, 2, 3],
    [3, 3, 3, 4]],

   [[1, 1, 1, 2],
    [2, 2, 2, 3],
    [3, 3, 3, 4]]])

这样我得到以下结果:

array([[[2, 1, 1, 1],
    [3, 2, 2, 2],
    [4, 3, 3, 3]],

   [[2, 1, 1, 1],
    [3, 2, 2, 2],
    [4, 3, 3, 3]]])

非常感谢!

python multidimensional-array numpy
3个回答
42
投票

怎么样:

import numpy as np
a = np.array([[[10, 1, 1, 2],
               [2, 2, 2, 3],
               [3, 3, 3, 4]],
              [[1, 1, 1, 2],
               [2, 2, 2, 3],
               [3, 3, 3, 4]]])

最后一个维度的逆向是:

b = a[:,:,::-1]

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

尽管我不太喜欢后者,因为前两个维度是隐式的,而且更难看出正在发生的事情。


1
投票

对于每个内部数组,您可以使用 fliplr。 它沿左/右方向翻转每行中的条目。列被保留,但显示顺序与以前不同。

使用示例:

import numpy as np
initial_array = np.array([[[1, 1, 1, 2],
                          [2, 2, 2, 3],
                          [3, 3, 3, 4]],
                         [[1, 1, 1, 2],
                          [2, 2, 2, 3],
                          [3, 3, 3, 4]]])
index=0
initial_shape = initial_array.shape
reversed=np.empty(shape=initial_shape)
for inner_array in initial_array:
    reversed[index] = np.fliplr(inner_array)
    index += 1

打印反转

输出:

array([[[2, 1, 1, 1],
        [3, 2, 2, 2],
        [4, 3, 3, 3]],
       [[2, 1, 1, 1],
        [3, 2, 2, 2],
        [4, 3, 3, 3]]])

确保 Fliplr 函数的输入数组必须至少是二维的。

此外,如果你想上下翻转数组。您还可以使用flipud


0
投票

您可以使用

numpy.flip()
轻松完成此操作:

import numpy as np
a = np.array([[[1, 1, 1, 2],
               [2, 2, 2, 3],
               [3, 3, 3, 4]],
              [[1, 1, 1, 2],
               [2, 2, 2, 3],
               [3, 3, 3, 4]]])
print(np.flip(a, axis=2))

这给出了:

array([[[2, 1, 1, 1],
        [3, 2, 2, 2],
        [4, 3, 3, 3]],
       [[2, 1, 1, 1],
        [3, 2, 2, 2],
        [4, 3, 3, 3]]])

根据需要。由于额外的方括号,输入数组是三维的。因此,沿着

axis=2
翻转不会执行任何操作,意味着翻转第三个轴(因为计数从 0 开始)。

请注意,这将返回一个视图,而不是副本(请参阅docs)。

© www.soinside.com 2019 - 2024. All rights reserved.