2017-06-10 1 views
2

J'avais joué autour du code que j'ai trouvé en ligne traitant de l'optimisation en utilisant Python 3. modifié, il a rendu un terrain comme celui-ciComment les entrées de fonction correctement vectorisés le code en Python 2

enter image description here

Maintenant, je m en utilisant Python 2, et le * n'est pas en cours de traitement. Je crois que le problème est l'itération de Python, mais je n'obtiens aucun résultat en suivant l'astuce de parenthèse proposée dans this post. Voici le code entier:

%matplotlib inline 

import matplotlib.pyplot as plt 
import pylab as pylab 
import autograd.numpy as np 

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.colors import LogNorm 
from matplotlib import animation 
from IPython.display import HTML 

from autograd import elementwise_grad, value_and_grad 
from scipy.optimize import minimize 
from collections import defaultdict 
from itertools import izip_longest 
from functools import partial 

f = lambda x, y: 10*np.cos(1*x) * 15*np.sin(1/2*y) + 150 
xmin, xmax, xstep = -4.5, 4.5, .2 
ymin, ymax, ystep = -4.5, 4.5, .2 

x, y = np.meshgrid(np.arange(xmin, xmax + xstep, xstep), np.arange(ymin, ymax + ystep, ystep)) 
z = f(x, y) 

minima = np.array([np.pi, np.pi]) 
minima_ = minima.reshape(-1, 1) 

fig = plt.figure(figsize=(8, 5)) 
ax = plt.axes(projection='3d', elev=50, azim=-50) 
ax.plot_surface(x, y, z, norm=LogNorm(), rstride=1, cstride=1, 
       edgecolor='none', alpha=.8, cmap=plt.cm.jet) 
ax.plot(*minima_, f(*minima_), 'o', markersize=4, color='w') 

ax.set_xlabel('$x$') 
ax.set_ylabel('$y$') 
ax.set_zlabel('$z$') 

ax.set_xlim((xmin, xmax)) 
ax.set_ylim((ymin, ymax)) 

plt.show() 

et le message d'erreur:

File "<ipython-input-5-3b03e44c1cac>", line 31 
    ax.plot(*minima_, f(*minima_), 'o', markersize=4, color='w') 
SyntaxError: only named arguments may follow *expression 
+0

Qu'est-ce que * z *? Assurez-vous que votre code s'exécute dans un environnement propre. – Parfait

+0

@Parfait Une des choses à propos de l'ordinateur portable est qu'il est facile d'oublier les cellules ... J'ai modifié OP maintenant. +1 et vert swoosh pour votre réponse! – Toni

Répondre

2

Tenir compte de l'affectation de minima_ valeurs par index. Ci-dessous est compatible à la fois dans python 2 et 3:

a,b = minima_[0], minima_[1]      # TO ADD 
ax.plot(a,b, f(a,b), 'o', markersize=4, color='w') # TO REPLACE