2016-06-29 6 views
0

Ich versuche eine 3D-Darstellung einer Oberfläche zu erstellen, die für verschiedene Regionen unterschiedlich definiert ist. Nehmen wir als Beispiel f (x, y), das als 1 definiert ist, wenn x> y ist, und als x^2, wenn x < = y ist.Python-Plot einer stückweise definierten Oberfläche

Ich definierte f mit logischen Operatoren und versuchte es mit der Funktion "plot_surface" zu plotten, indem ich es in einem Raster auswertete. Leider habe ich eine Fehlermeldung erhalten, dass "der Wahrheitswert eines Arrays mit mehr als einem Element mehrdeutig ist".

Kennen Sie eine Lösung?

+0

Mögliche Duplikat [Valueerror: Der Wahrheitswert eines Arrays mit mehr als ein Element ist mehrdeutig. Verwende a.any() oder a.all()] (http://stackoverflow.com/questions/10062954/valueerror-the-truth-value-of-an-array-with-more-than-one-element- ist-mehrdeutig) – m00am

+0

Mögliche Duplikate von [stückweise Funktion mit 3D-Plot] (http://stackoverflow.com/questions/22430429/piecewise-function-with-3d-plot) – Serenity

+0

Ich las die Einträge und ich würde sagen, dass die spezifische Probleme, die dort behandelt werden, lösen mein Problem nicht ... – Ignatius

Antwort

0

aus dem Link Taking von Serenity geschrieben Sie f mit np.piecewise

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import axes3d, Axes3D 

num_steps = 500 
x_arr = np.linspace(0,100, num_steps) 
y_arr = np.linspace(0,100, num_steps) 

def zfunc(x, y): 
    return np.piecewise(x, [x>y, x<=y], [lambda x: 1, lambda x: x**2]) 

x,y = np.meshgrid(x_arr, y_arr) 
z =zfunc(x,y) 

fig=plt.figure() 
ax=fig.add_subplot(1,1,1,projection='3d') 
ax.set_xlabel('X axis') 
ax.set_ylabel('Y axis') 

ax.plot_surface(x,y,z,cmap='viridis') #cmap to make it easier to see 
ax.view_init(30, 70) 
plt.show() 

Geben Sie das Grundstück definieren müssen: enter image description here

Verwandte Themen