【发布时间】:2016-07-21 11:14:59
【问题描述】:
我正在尝试绘制一个有条件定义的函数。具体来说: U(x) = (2**delta)/((Dd)**delta)*(D/2 - (x-x0))**delta ,对于 abs(x-x0) 小于 D/2 和 0否则。
但我的问题是我想将 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)。但是如果我用np.less(tempx, tempD) 替换tempx < tempD 它仍然不起作用,因为我再次要求整个列表的真值。我知道问题不在于 numpy,而在于我无法理解如何使用 numpy 提供的逻辑函数。
如果这在另一篇文章中以某种方式回答,我很抱歉,我在这个论坛中搜索但除了curve() 方法之外找不到其他东西。但是我想保留我的 numpy.array 格式以在我的实际代码中使用。我敢打赌,答案一定很简单,我就是想不出来。
【问题讨论】:
-
关于您的错误,请参阅stackoverflow.com/a/30081652/901925 及其侧边栏。
标签: python numpy plot comparison conditional