【发布时间】:2020-01-05 06:31:57
【问题描述】:
我有一个多维 numpy 数组,用四个 x、y 点(point1、point2、point3、point4)表示四个多边形:
[
[[248.37320795 107.04369371]
[628.13542608 93.60279784]
[631.17731304 179.54898405]
[251.41509491 192.98987991]]
[[594.74347239 199.82026651]
[844.73138802 197.36221057]
[845.14434142 239.36018039]
[595.15642579 241.81823634]]
[[829.86702923 202.4087094 ]
[984.86439225 201.50457644]
[985.10355 242.50387892]
[830.10618698 243.40801188]]
[[634.70578451 138.71948586]
[819.6945026 136.67640474]
[820.27981773 189.67317263]
[635.29109964 191.71625375]]
]
我需要遍历这个数组,并在下面的某些条件下合并它的值。例如:
如果两个多边形的 y 差异
[[minX, minY]
[maxX, minY]
[maxX, maxY]
[minX, maxY]]
我必须用这个值重写其中一个多边形并删除第二个。
我试图遍历它们,但问题是我以某种方式删除了多边形,而我不必这样做。 我是 python 和 numpy 的新手,感觉自己做错了什么)这是我得到的:
for i, (i_p1, i_p2, i_p3, i_p4) in enumerate(arr):
pass
for j, (j_p1, j_p2, j_p3, j_p4) in enumerate(arr, i + 1):
# calculate diffs of Y coordinates between polygons
if j <= len(arr):
y_diffs = (abs(j_p1[1] - i_p1[1]),
abs(j_p2[1] - i_p2[1]),
abs(j_p3[1] - i_p3[1]),
abs(j_p4[1] - i_p4[1]))
if y_diffs <= (20, 20, 20, 20):
# unite polygons
arr[i] = [
[min(i_p1[0], j_p1[0]), min(i_p1[1], j_p1[1])],
[max(i_p2[0], j_p2[0]), min(i_p2[1], j_p2[1])],
[max(i_p3[0], j_p3[0]), max(i_p3[1], j_p3[1])],
[min(i_p4[0], j_p4[0]), max(i_p4[1], j_p4[1])],
]
# delete remaining polygon
# if j < len(drawPolys):
# drawPolys = np.delete(drawPolys, j, axis=0)
# break
我想要的结果数据:
[
[[248.37320795 107.04369371]
[628.13542608 93.60279784]
[631.17731304 179.54898405]
[251.41509491 192.98987991]]
[[594.74347239 199.82026651]
[984.86439225 197.36221057]
[985.10355 242.50387892]
[595.15642579 243.40801188]]
[[634.70578451 138.71948586]
[819.6945026 136.67640474]
[820.27981773 189.67317263]
[635.29109964 191.71625375]]
]
【问题讨论】:
-
"如果两个多边形的 y 差异 all y 值必须小于 2”还是你的意思是“
any其中可能小于超过 20 英寸? -
@MateenUlhaq 全部
-
我认为这里的主要问题是您试图重用相同的数组
arr作为输入和输出。尝试创建一个数组列表,并在发现新数组时将“合并”数组附加到其中。 -
我认为您的预期结果不正确。 (与您的描述不符。)
标签: python arrays numpy iteration