Я пытаюсь построить функцию, которая определена условно. В частности: U (x) = (2 ** delta)/((Dd) ** delta) * (D/2 - (x-x0)) ** delta, для abs (x-x0) меньше D/2 и 0 в противном случае.Условное построение с помощью Numpy и Pyplot
Но моя проблема в том, что я хочу иметь x, x0 как массивы numpy, потому что так я использую их в остальной части моего фактического кода.
следующего примера я настройка:
import numpy as np
import matplotlib.pyplot as plt
AD = 0.2
D = 0.4
delta = 8
def Parabolic(x, delta, D, AD):
x0 = np.round(x)
tempx = np.abs(x-x0)
tempD = D/2*np.ones(len(x))
if tempx<tempD:
return ((2**delta)/(D-AD)**delta)*(D/2 - (x-x0))**delta
else:
return 0
figure = plt.figure(figsize=(10,8), dpi=72)
xmin = -1.0
xmax = 1.0
X = np.linspace(xmin,xmax,1000)
plt.plot(X, Parabolic(X, delta=8, D=0.4, AD=0.2))
Очевидно, что этот пример не работает, так как линия tempx<tempD
вызывает ошибку, что Истина-значение из списка является неоднозначным.
Я искал документацию numpy и нашел функцию np.less (tempx, tempD). Но если я заменил tempx < tempD
на np.less(tempx, tempD)
, он все равно не работает, так как я снова прошу значение истины для всего списка. Я понимаю, что проблема связана не с numpy, а с моей неспособностью понять, как использовать логические функции, которые предоставляет numpy.
Прошу прощения, если это ответили каким-то образом в другом посте, я искал в этом форуме, но не смог найти что-то еще, кроме метода curve()
. Однако я хочу сохранить формат numpy.array для использования в моих действительных кодах. Я бы поспорил, что ответ должен быть очень простым, я просто не могу думать об этом.
На вашей ошибки см Http: // stackoverflow.com/a/30081652/901925 и его боковой панели. – hpaulj