【问题标题】:numpy reverse multidimensional arraynumpy 反向多维数组
【发布时间】:2011-11-16 23:41:15
【问题描述】:

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


    【解决方案1】:

    怎么样:

    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([] , 形状=(2, 3, 0), dtype=int64)。它是 numpy 1.7.1。不愉快,对吧?
    【解决方案2】:

    对于每个内部数组,您可以使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多