NumPy反转多维数组

25

在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]]])

非常感谢!

2个回答

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]
虽然我不太喜欢后者,因为前两个维度是隐含的,更难理解正在发生的事情。

a[..., 3::-1] 还可以,但现在有一个惊喜:a[..., 3:-1:-1] 的结果是:array([], shape=(2, 3, 0), dtype=int64)。这是numpy 1.7.1版本。很不愉快,对吧? - vak

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 函数的输入数组至少为 2-D。

此外,如果您想在上下方向翻转数组,则还可以使用 flipud


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接