У меня есть функция, которую мне нужно вычислить и визуализировать для диапазона аргументов.
Вот пример кода Jupyter:
%pylab
%matplotlib inline
%matplotlib notebook
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
def testFunc(x):
a = x[0] - x[1]
#if a < 0:
# a = 0
b = 2*(a**3)
return b
X = np.arange(100, 10000, 10)
Y = np.arange(3600, 3900, 10)
X, Y = np.meshgrid(X, Y)
Z = testFunc([X, Y])
fig = plt.figure(figsize=(12,8))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
Работает нормально: ![enter image description here](https://i.stack.imgur.com/5sV8U.png)
НО Мне нужно добавить дополнительную логику к функции:
if a < 0:
a = 0
Когда я раскомментирую эти строки, я получаю ошибку:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-273b40ed507a> in <module>()
20 Y = np.arange(3600, 3900, 10)
21 X, Y = np.meshgrid(X, Y)
---> 22 Z = testFunc([X, Y])
23
24 fig = plt.figure(figsize=(12,8))
<ipython-input-15-273b40ed507a> in testFunc(x)
11 a = x[0] - x[1]
12
---> 13 if a < 0:
14 a = 0
15
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Применяет ли функция массив значений в «a»?Поэтому он не знает, какой элемент сравнивать с «0».
Не могли бы вы порекомендовать хороший способ вычисления функции с условиями для диапазона атрибутов (с возможностью его визуализации)?