Python中数组的对数

Kev*_*fer 0 python arrays math numpy logarithm

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()
Run Code Online (Sandbox Code Playgroud)

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

每次我运行程序时,都会收到此错误."plot(time,log(zlist))TypeError:只能将length-1数组转换为Python标量"

任何想法如何使zlist不是一个数组所以我可以采取日志,或者只是我的程序出了什么问题?其他一切都很好,只有一个问题.(仅供注意,我已导入pylab,numpy和数学)

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

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

And*_*ffe 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))
Run Code Online (Sandbox Code Playgroud)

或更好

plt.semilogy(time, zlist)
Run Code Online (Sandbox Code Playgroud)