【发布时间】:2019-10-14 11:02:51
【问题描述】:
我们正在尝试创建一组彼此靠近的坐标。要创建这个组,我们需要将 numpy 数组的 x、y 坐标与数组中的第一个元素进行比较。
如果它们匹配,我们将其存储在现有数组中的一个中,否则我们创建一个新数组并将它们存储在那里。
我们已经尝试使用 for 循环并分别提取 x 和 y。但是,它没有工作。
mport numpy as np
coordinates = [(580.4625,201.87183),(580.4625,201.87183),(167.84459,701.64935),
(167.84459,701.64935),(167.84459,694.65247),(167.84459,694.65247),
(979.09344,725.6387),(979.09344,725.6387),(979.09344,725.6387),
(979.09344,725.6387),(200.81406,1271.3956),(200.81406,1271.3956),
(200.81406,1271.3956),(1005.0694,1266.398),(1005.0694,1266.398),
(1005.0694,1266.398),(180.83257,1568.2635),(180.83257,1568.2635),
(994.0796,1591.2533),(539.5005,1862.1327)]
seen = set()
newlist = []
for item in coordinates:
t = tuple(item)
if t not in seen:
newlist.append(item)
seen.add(t)
npArray = np.array(newlist)
newlist = npArray.astype(int)
npArray2 = np.array(newlist)
coordinates1 = npArray2.astype(int)
for i in coordinates1[0]:
print(i[0])
我们正在尝试在单独的变量中获取上述消息中坐标的第一个元素。
目前我们收到一个错误: IndexError: 标量变量的索引无效。
我们是 python 新手,所以任何指南都会有所帮助,即使指向更好的方法。
谢谢!
感谢您的所有回答。我认为我的错误在于没有解释问题。我会在这里再试一次:
coordinates = [(580.4625,201.87183),(580.4625,201.87183),(167.84459,701.64935),
(167.84459,701.64935),(167.84459,694.65247),(167.84459,694.65247),
(979.09344,725.6387),(979.09344,725.6387),(979.09344,725.6387),
(979.09344,725.6387),(200.81406,1271.3956),(200.81406,1271.3956),
(200.81406,1271.3956),(1005.0694,1266.398),(1005.0694,1266.398),
(1005.0694,1266.398),(180.83257,1568.2635),(180.83257,1568.2635),
(994.0796,1591.2533),(539.5005,1862.1327)]
我们正在尝试创建位于上述列表中第一个坐标的 30 点 + 或 - 的邻近/范围内的坐标组。
因此,为此我们需要将所有坐标 (x, y) 与第一个坐标一一进行比较,如果它们在上述范围内,我们会将它们分配给一个组(例如 G1 )/数组,其中第一个坐标作为该组中的第一个元素。
如果不在范围内,我们将创建另一个组(例如 G2)/数组,并在这个新组中插入不在范围内的坐标。
通过这种方式,我们进一步逐一比较上面列表中的每个元素,直到所有坐标都被比较并分配给其中一个组。
希望,我说得更清楚了。
非常感谢您的帮助!
最好的问候,
【问题讨论】:
-
因此您想将每个 (x, y) 坐标与坐标列表的第一个值进行比较:
(580.4625,201.87183)。如果 (x, y) 接近该值,则将其放置在例如L1如果不是,则将其放置在例如L2。我对么?你如何定义 (x, y) 是否接近(580.4625,201.87183)?在z的半径范围内? -
对了,第一个for循环可以换成
set(coordinates)。但是,在我们得到您想要实现的目标之前,我们无法引导您朝着正确的方向前进。也许您可以提供预期的输入/输出。 -
是的,你是对的。我们在给定坐标的 30 半径内定义接近度,这不是一个列表,我只是将列表转换为 Numpy 数组以获取整数值。 @ma
-
输出如下:比较数组 [580 201] 与彼此的坐标,并尝试找到 x 的坐标在 550 到 610 的范围内,y 的坐标在 171 到 231 的范围内(如果它们在),那么我们创建一组坐标,否则我们创建一个新数组,然后递归地检查它。搜索后的数组 --> [580 201,[560 214],[552 230]] .
标签: python-3.x list numpy