簡體   English   中英

使用numpy“旋轉”數組排序

[英]"Rotate" array ordering with numpy

我試圖弄清楚如何在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 循環中改變,那就很高興知道了。

使用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]]]

盡管這不是用 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 在那里我需要在圖像合並功能中進行此排序,我在其中渲染零件並需要將它們按正確的順序排列。 合並過程還沒有工作,但這個排序似乎工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM