【问题标题】:"Rotate" array ordering with numpy使用numpy“旋转”数组排序
【发布时间】:2020-02-09 06:53:37
【问题描述】:

我正在试图弄清楚如何在 numpy 这种情况下订购:

首先我创建了带有两个 for 循环的图像块(仅作为示例):

cuts = 9 # This is for example, there could be much more blocks
for row in range(cuts):
    for column in range(cuts):
        block_min_x = (1 / cuts) * row
        block_max_x = (1 / cuts) * (row + 1)
        block_min_y = (1 / cuts) * column
        block_max_y = (1 / cuts) * (column + 1)

然后我将这些“图像块”按顺序添加到名称为 "img_1_1, img_1_2, img_1_3, img_2_1, img_2_2, img_2_3..." 的数组中。所以它在数组中看起来像这样(数字示例):

[6,7,8] [15,16,17] [24,25,26]
[3,4,5] [12,13,14] [21,22,23]
[0,1,2] [9,10,11]  [18,19,20]

是否有某种方法可以使用 numpy 来命令这些块像这样:

[0,1,2]     [3,4,5]     [6,7,8]
[9,10,11]   [12,13,14]  [15,16,17]
[18,19,20]  [21,22,23]  [24,25,26]

这里的图片可以更好地展示我正在寻找的东西:

我不确定这种问题是否有某种术语,所以抱歉不能使用正确的术语。问题似乎是我们需要“顺时针旋转”,如您在示例图像中的蓝线中看到的那样。所以问题是,如何在 numpy 中订购它?此外,如果它可以在那些 for 循环中发生变化,我很高兴知道。

【问题讨论】:

  • rot90 是你应该使用的,因为它更具可读性,但值得意识到你可以使用a[::-1].T 进行旋转,即“垂直翻转然后对角翻转”.

标签: python arrays numpy sorting


【解决方案1】:

使用numpy.rot90:

In [11]: a = np.array([[6,7,8],[3,4,5], [0,1,2]])

In [12]: b = np.array([[15,16,17], [12,13,14], [9,10,11]])

In [13]: c = np.array([[24,25,26], [21,22,23], [18,19,20]])

In [14]: print(np.array([a, b, c]))
[[[ 6  7  8]
  [ 3  4  5]
  [ 0  1  2]]

 [[15 16 17]
  [12 13 14]
  [ 9 10 11]]

 [[24 25 26]
  [21 22 23]
  [18 19 20]]]

In [15]: print(np.rot90([a, b, c]))
[[[ 0  1  2]
  [ 9 10 11]
  [18 19 20]]

 [[ 3  4  5]
  [12 13 14]
  [21 22 23]]

 [[ 6  7  8]
  [15 16 17]
  [24 25 26]]]

【讨论】:

    【解决方案2】:

    即使这不是用 numpy 完成的,但对某人仍然有用。通过像这样循环它们,我得到了正确的顺序。我确信这可以在代码中做得更好,但现在似乎可行:

    # Order rendered images (to 1, 2, 3, 4 from 3, 1, 2, 4)
    rendered_images_ordered = []            
    for y in range(parts_count, 0, -1):
        for x in range(parts_count):
            rendered_images_ordered.append(rendered_images[(y-1)+(x*parts_count)])
    

    输出之前

    ['Fart_1_1.png', 'Fart_1_2.png', 'Fart_1_3.png', 'Fart_2_1.png', 'Fart_2_2.png', 'Fart_2_3.png', 'Fart_3_1.png', 'Fart_3_2.png', 'Fart_3_3.png']
    

    输出之后

    ['Fart_1_3.png', 'Fart_2_3.png', 'Fart_3_3.png', 'Fart_1_2.png', 'Fart_2_2.png', 'Fart_3_2.png', 'Fart_1_1.png', 'Fart_2_1.png', 'Fart_3_1.png']
    

    如果对我在哪里使用它感兴趣。我将它创建到名为 RenderFarts 的搅拌机插件中。在那里,我需要在image merge function 中进行此排序,并在其中渲染零件并需要将它们按正确的顺序排列。合并过程还没有工作,但这个排序似乎工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 2011-09-29
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多