Stelle möchte ich Clustering DBSCAN Algorithmus mit einer Datenmenge zu tun, die 3 Punkte enthält. Dies ist der Datensatz:ValueError: Der Wahrheitswert eines Arrays mit mehr als einem Element ist mehrdeutig. Verwenden a.any() oder a.All() Python DBSCAN 3 Dimensionen
1 5 7
12 8 9
2 4 10
6 3 21
11 13 0
6 3 21
11 13 0
3 7 1
1 9 2
1 5 7
ich Clustering mit diesem Code:
from math import sqrt, pow
def __init__(eps=0.1, min_points=2):
eps = 10
min_points = 2
visited = []
noise = []
clusters = []
dp = []
def cluster(data_points):
visited = []
dp = data_points
c = 0
for point in data_points:
if point not in visited:
visited.append(point)
print point
neighbours = region_query(point)
#print neighbours
if len(neighbours) < min_points:
noise.append(point)
else:
c += 1
expand_cluster(c, neighbours)
#cluster(data_points)
def expand_cluster(cluster_number, p_neighbours):
cluster = ("Cluster: %d" % cluster_number, [])
clusters.append(cluster)
new_points = p_neighbours
while new_points:
new_points = pool(cluster, new_points)
def region_query(p):
result = []
for d in dp:
distance = (((d[0] - p[0])**2 + (d[1] - p[1])**2 + (d[2] - p[2])**2)**0.5)
print distance
if distance <= eps:
result.append(d)
return result
#p_neighbours = region_query(p=pcsv)
def pool(cluster, p_neighbours):
new_neighbours = []
for n in p_neighbours:
if n not in visited:
visited.append(n)
n_neighbours = region_query(n)
if len(n_neighbours) >= min_points:
new_neighbours = unexplored(p_neighbours, n_neighbours)
for c in clusters:
if n not in c[1] and n not in cluster[1]:
cluster[1].append(n)
return new_neighbours
@staticmethod
def unexplored(x, y):
z = []
for p in y:
if p not in x:
z.append(p)
return z
in diesem Code gibt es point
und n
Variablen, die mit data_points
gleichen sind, die den Datensatz enthält. Wenn ich manuell lese denke ich, dass dieser Code tatsächlich funktionieren kann, aber wenn ich cluster()
Funktion ausführen, gibt es einen Fehler.
Traceback (most recent call last):
File "<ipython-input-39-77eb6be20d82>", line 2, in <module>
if n not in visited:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Ich weiß nicht, warum dieser Code noch diesen Fehler erhalten, während ich n
oder point
Variable mit Indexdaten ändern. Hast du eine Idee was mit diesem Code nicht stimmt? Wie kann ich es zum Laufen bringen?
danken Ihnen für Ihre Hilfe ..
Sie haben ernsthafte Probleme mit lokalen und globalen Variablen in Ihrem Code. – Daniel