from numpy import *
from pylab import *
from math import *
def TentMap(a,x):
if x>= 0 and x<0.5:
return 2.*a*x
elif x>=0.5 and x<=1.:
return 2.*a*(1.-x)
# We set a = 0.98, a typical chaotic value
a = 0.98
N = 1.0
xaxis = arange(0.0,N,0.01)
Func = TentMap
subplot(211)
title(str(Func.func_name) + ' at a=%g and its second iterate' %a)
ylabel('X(n+1)') # set y-axis label
plot(xaxis,Func(a,xaxis), 'g', antialiased=True)
subplot(212)
ylabel('X(n+1)') # set y-axis label
xlabel('X(n)') # set x-axis label
plot(xaxis,Func(a,Func(a,xaxis)), 'bo', antialiased=True)
我的TentMap功能无法正常工作。我不断收到错误“有多个元素的数组的真值是不明确的。使用a.any()或a.all()”我不明白我应该如何使用它们。基本上,TentMap函数采用值X并根据X是什么返回特定值。因此,如果0 <= x <0.5则返回2 * a * x并且如果0.5 <= x <= 1则返回2 * a *(1-x)。
答案 0 :(得分:3)
如果你将一个numpy数组与一个数字进行比较,你会得到另一个数组:
>>> from numpy import arange
>>> xaxis = arange(0.0, 0.04, 0.01)
>>> xaxis
array([ 0. , 0.01, 0.02, 0.03])
>>> xaxis <= .02
array([ True, True, True, False], dtype=bool)
如果您希望and
使用其他内容,或者在布尔上下文中使用它,问题就会出现:
>>> xaxis <= .02 and True
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> bool(xaxis <= .02)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
这就是你在TentMap
的构造函数中尝试做的事情。您确定不需要在使用a
的地方使用x
吗?
答案 1 :(得分:3)
您可以使用np.vectorize
来解决使用带有标量值和arrray的and
时出现的错误。电话看起来像
np.vectorize(TentMap)(a,xaxis)