使用numpy进行“旋转”数组排序

2024-04-29 04:58:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

首先,我创建了带有两个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]

这是一张更好地展示我所寻找的图像:

Ordering Example Image

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


Tags: in图像numpy示例imgforrangecolumn
2条回答

使用^{}

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']

Before

之后输出

['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']

After

如果你对我在哪里使用这个感兴趣的话。我创建了这个名为RenderFarts的blender插件。在那里,我需要在image merge function中进行排序,在那里我渲染部件,并需要将这些部件按正确的顺序排列。合并过程尚未工作,但这种排序似乎工作正常

相关问题 更多 >