我们正在尝试创建一组相互之间距离很近的坐标。要创建该组,我们需要将numpy数组的x,y坐标与arrary中的第一个元素进行比较。
如果它们匹配,我们将其存储在现有阵列中,否则,我们创建一个新的并将其存储在其中。
我们已经尝试过使用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 )/数组,其中第一个co-ordiante作为该组中的第一个元素。
如果不在范围内,我们将创建另一个组(例如G2)/阵列,并将不在此范围内的共畸变插入该新组中。
通过这种方式,我们进一步对上面列表中的每个元素进行一次比较,直到所有坐标都被比较并分配给其中一个组为止。
希望,我说得更清楚。
非常感谢您的帮助!
最好的问候,
答案 0 :(得分:0)
尝试,它有效,
for i in coordinates1:
print(i[0])
因为numpy数组坐标1的形状为(9,2),所以不需要坐标[0]来访问x坐标。
答案 1 :(得分:0)
由于您正在寻找一个圆内的点,因此您可以在此处找到一种方法。您将需要对其进行调整,以使其不太清楚。
import 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)]
reference = (580.4625,201.87183)
z = 30 # Radius
L1 = list()
L2 = list()
for coord in coordinates:
# coord is a tuple of 2 values, x and y.
x = coord[0]
y = coord[1]
# Compute distance in 2D space
d = np.sqrt((x-reference[0])**2+(y-reference[1])**2)
# Add to the correct list
if d <= z:
L1.append(coord)
else:
L2.append(coord)
此外,这些步骤也可以通过列表理解来完成,这将使您获得一线希望:
L1 = [coord for coord in coordinates if np.sqrt((coord[0]-reference[0])**2+(coord[1]-reference[1])**2) <= z]
L2 = [coord for coord in coordinates if not np.sqrt((coord[0]-reference[0])**2+(coord[1]-reference[1])**2) <= z]
现在,假设您要在坐标上循环,并且每次创建附近点的L1列表,即在所考虑坐标的z = 30
半径内创建点的簇,则可以创建一个列出cluster
并每次添加附近点列表。
import 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)]
z = 30 # Radius
clusters = list()
for ref in coordinates:
# coord is a tuple of 2 values, x and y.
x = ref[0]
y = ref[1]
clusters.append([coord for coord in coordinates \
if np.sqrt((coord[0]-x)**2+(coord[1]-y)**2) <= z])
使用此方法,如果一个点在2个簇的范围内,则它将同时包含在两个簇中。
此外,某些点在坐标中两次出现。要删除重复项,可以使用set
。
coordinates = list(set(coordinates))
集群示例。元素(167.84459,701.64935)
导致集群[(167.84459, 701.64935), (167.84459, 694.65247)]
(已复制)。
答案 2 :(得分:-1)
我对您的意思没有很好的理解,但是请尝试以下操作:
return response()->json([
'message' => 'Quote Successfully Sent!','data' => $clientquote
], 201);