0
from numpy import *
from pylab import plot,show
q=10
time = range(q)
mlist=empty(q)
nlist=empty(q)
m=.9
n=(m+(1e-6))
b=3

for t in range(q):
    mlist[t]=m
    nlist[t]=n
    m=(b*(1-m)*m)
    n=(b*(1-n)*n)

zlist = mlist-nlist
zlist = abs(zlist)
plot(time, log(zlist))
show()

然后我想绘制时间图,log(zlist)

每次我运行程序时,我都会收到此错误。“plot(time,log(zlist)) TypeError: 只有长度为 1 的数组可以转换为 Python 标量”

任何想法如何使 zlist 不是数组以便我可以记录日志,或者我的程序出了什么问题?其他一切都很好,只是一个问题。(请注意,我已经导入了 pylab、numpy 和 math)

编辑: q 值相对不重要,但理想情况下最终会在 500-1000 范围内上升。m 和 n 必须介于 0 和 1 之间,b 必须介于 0 和 4 之间。

编辑X2:它现在似乎正在工作,我不知道为什么,但它可能是a)从数学中导入日志,或者b,负值问题,但无论如何,它运行良好。感谢所有贡献的人!

4

2 回答 2

6

我怀疑你做了from math import *之后from numpy import *,这意味着这log实际上math.log不适用于阵列。

你真的不应该import *在脚本中使用。相反,你应该这样做

import numpy as np
import matplotlib.pyplot as plt

q=10
time = np.arange(q)
mlist = np.empty(q)
nlist = np.empty(q)
m=.9
n=(m+(10e-6))
b=3

for t in range(q):
  mlist[t]=m
  nlist[t]=n
  m *=b*(1-m)
  n *=b*(1-n)

zlist = mlist-nlist

plt.plot(time, np.log(zlist))

或更好

plt.semilogy(time, zlist)
于 2012-02-16T20:40:28.887 回答
0

尝试

plot(time, map(log, zlist))

这会将 log 函数应用于 zlist 中的每个数字。

于 2012-02-16T20:38:38.680 回答