首页 > 解决方案 > 使用条件在另一个 numpy 数组中组织数组

问题描述

我有一个带有坐标的 numpy 数组,如下所示:

a = [[213, 290], [213, 291], [213, 292], [213, 293], [213, 294], [213, 323], [213, 324], [213, 325], [213, 326], [213, 327], [223, 309], [223, 310], [223, 311], [289, 308], [289, 309], [289, 330], [289, 331], [290, 312], [290, 313], [290, 314], [290, 315], [290, 330], [290, 331], [290, 332], [290, 333], [342, 316], [342, 317], [342, 318], [342, 319], [342, 320], [343, 312], [343, 313], [343, 314], [343, 315], [352, 292], [353, 292], [354, 292], [355, 292], [356, 292], [357, 292], [357, 293], [357, 294], [357, 295], [357, 296], [357, 297], [385, 292], [385, 293], [385, 294], [385, 296], [386, 291], [386, 292], [386, 293], [386, 294], [387, 292], [387, 293]]
a = np.array([np.array(e) for e in a]) #the thing that i actually get in my script

b是一个新数组,其中包含每个唯一 Y(坐标的第一个数字)的数组,并且这些数组包含具有 YX 坐标的数组,但如果 X 不是 x=x+1 ,则使用新的 x 顺序创建另一个数组。

这个循环可以解决问题,但我正在寻找一种更优雅也不是 numpy'ish 的方法:

previous_Y = None
previous_X = None
b = []
for yx in a:
    y, x = yx
    if y == previous_Y:
        if previous_X != None and x == previous_X+1:
            b[-1][-1].append(yx)
        else:
            b[-1].append([yx])
    else:
        b.append([[yx]])
    LY, LX = yx

输出:

b = [[(213, 290), (213, 291), (213, 292), (213, 293), (213, 294)], [(213, 323), (213, 324), (213, 325), (213, 326), (213, 327)]],
[[(223, 309), (223, 310), (223, 311)]],
[[(289, 308), (289, 309)], [(289, 330), (289, 331)]],
[[(290, 312), (290, 313), (290, 314), (290, 315)], [(290, 330), (290, 331), (290, 332), (290, 333)]],
[[(342, 316), (342, 317), (342, 318), (342, 319), (342, 320)]],
[[(343, 312), (343, 313), (343, 314), (343, 315)]],
[[(352, 292)]],
[[(353, 292)]],
[[(354, 292)]],
[[(355, 292)]],
[[(356, 292)]],
[[(357, 292), (357, 293), (357, 294), (357, 295), (357, 296), (357, 297)]],
[[(385, 292), (385, 293), (385, 294)], [(385, 296)]],
[[(386, 291), (386, 292), (386, 293), (386, 294)]],
[[(387, 292), (387, 293)]]

标签: pythonnumpy

解决方案


推荐阅读