Python中数组的对数

Python中数组的对数,python,arrays,math,numpy,logarithm,Python,Arrays,Math,Numpy,Logarithm,然后我想画出时间图,log(zlist) 每次我运行这个程序,我都会遇到这个错误。 “绘图(时间、日志(zlist)) TypeError:只能将长度为1的数组转换为Python标量“ 你知道如何使zlist不是一个数组,这样我就可以记录日志了,还是我的程序出了什么问题? 其他一切都很好,只有一个问题。 (请注意,我已经导入了pylab、numpy和math) 编辑:q值相对不重要,但理想情况下最终会在500-1000范围内。m和n必须在0和1之间,b必须在0和4之间 编辑X2:它现在似乎在工作

然后我想画出时间图,log(zlist)

每次我运行这个程序,我都会遇到这个错误。 “绘图(时间、日志(zlist)) TypeError:只能将长度为1的数组转换为Python标量“

你知道如何使zlist不是一个数组,这样我就可以记录日志了,还是我的程序出了什么问题? 其他一切都很好,只有一个问题。 (请注意,我已经导入了pylab、numpy和math)

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

编辑X2:它现在似乎在工作,我不知道为什么,但它可能是a)从数学导入日志,或者b,负值问题,但不管怎样,它工作得很好。感谢所有做出贡献的人

试试看

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()
这将对zlist中的每个数字应用log函数。

试试看

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中的每个数字。

我怀疑您在numpy import*中的
之后执行了
数学导入*
,这意味着
日志
实际上是
数学.log
,在数组中不起作用

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

plot(time, map(log, zlist))
或者更好

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))

我怀疑您是在numpy import*
中的
之后从math import*
中执行的
,这意味着
log
实际上是
math.log
,在数组中不起作用

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

plot(time, map(log, zlist))
或者更好

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))

你知道
10e-6
是一种相当奇怪的书写方式
1e-5
?你说你“导入了pylab、numpy和数学”是指“导入pylab”还是“从pylab导入*”?如果是后者,顺序是什么?您需要确保获得的是numpy.log,而不是math.log。这就是为什么你不应该做“从numpy导入*”!您应该包括程序的整个相关部分,包括行
plot(time,log(zlist))
和导入plot命令。请注意
zlist
包含很多负值,所以大多数对数都没有定义。你知道
10e-6
是一种相当奇怪的书写
1e-5
?你说“已经导入pylab、numpy和math”是指“导入pylab”还是“从pylab导入*”?如果是后者,顺序是什么?您需要确保获得的是numpy.log,而不是math.log。这就是为什么你不应该做“从numpy导入*”!您应该包括程序的整个相关部分,包括行
plot(time,log(zlist))
和导入plot命令。请注意
zlist
包含很多负值,因此,大多数对数都没有定义。NumPy版本的
log
自动应用于数组的所有项——不需要
map()。可能发生了这样的情况:OP最终以
math.log
而不是
numpy.log
,但在这种情况下,修复方法是使用正确版本的
log()
,而不是
map()
错误版本。
log
的numpy版本自动应用于数组的所有项——无
map()
必要时。可能发生了这样的情况,OP最终以
math.log
而不是
numpy.log
,但在这种情况下,修复方法是使用正确版本的
log()
,而不是
map()
错误版本。