2017-05-08 1 views
0

Ich implementiere ein Perceptron 3D, und in diesem Fall habe ich n Punkte, die trennbar sind, in dem Fall blaue Punkte und rote Punkte, und ich muss sie von meinem zeichnen Wörterbuch habe ich versucht, dies zu tun:Einfachste Möglichkeit, trennbare 3D-Punkte in Python zu zeichnen

training_data = { 
'0.46,0.98,-0.43' : 'Blue', 
'0.66,0.24,0.0' : 'Blue', 
'0.35,0.01,-0.11' : 'Blue', 
'-0.11,0.1,0.35' : 'Red', 
'-0.43,-0.65,0.46' : 'Red', 
'0.57,-0.97,0.8' : 'Red' 
} 

def get_points_of_color(data, color): 
    x_coords = [point.split(",")[0] for point in data.keys() if 
data[point] == color] 
    y_coords = [point.split(",")[1] for point in data.keys() if 
data[point] == color] 
    z_coords = [point.split(",")[2] for point in data.keys() if 
data[point] == color] 
    return x_coords, y_coords, z_coords 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

# Plot blue points 
x_coords, y_coords, z_coords = get_points_of_color(training_data, 'Blue') 
ax.scatter(x_coords, y_coords, z_coords, 'bo') 

# Plot red points 
x_coords, y_coords, z_coords = get_points_of_color(training_data, 'Red') 
ax.scatter(x_coords, y_coords, z_coords, 'ro') 

ax.set_xlim(-1, 1) 
ax.set_ylim(-1, 1) 
ax.set_zlim(-1, 1) 
ax.set_xlabel('X') 
ax.set_ylabel('Y') 
ax.set_zlabel('Z') 

plt.show() 

Aber ohne Erfolg, erhalte ich die folgende Fehlermeldung:

TypeError: Cannot cast array data from dtype('float64') to dtype('S32') according to the rule 'safe' 

PS: ich verwende:

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

Ich würde gerne wissen, was ich falsch mache, und wie kann ich sie richtig plotten.

+0

Ihre Koordinaten Strings sind, auch nach der Trennung Sie haben ' "0,46"', statt '0.46'. Sie müssen sie in ein Float-Objekt umwandeln, float ("0.46") == 0.46'. – ImportanceOfBeingErnest

Antwort

1

Ihre Koordinaten sind Zeichenketten, auch nach dem Teilen haben Sie "0.46" statt 0.46. Sie müssen sie in einen Float, z. float("0.46") == 0.46.

Also in diesem Fall kann die Umwandlung in Listen Generation passieren:

x_coords = [float(point.split(",")[0]) for point in data.keys() if data[point] == color] 
Verwandte Themen