Python中数组的对数
然后我想画出时间图,log(zlist) 每次我运行这个程序,我都会遇到这个错误。 “绘图(时间、日志(zlist)) TypeError:只能将长度为1的数组转换为Python标量“ 你知道如何使zlist不是一个数组,这样我就可以记录日志了,还是我的程序出了什么问题? 其他一切都很好,只有一个问题。 (请注意,我已经导入了pylab、numpy和math) 编辑:q值相对不重要,但理想情况下最终会在500-1000范围内。m和n必须在0和1之间,b必须在0和4之间 编辑X2:它现在似乎在工作,我不知道为什么,但它可能是a)从数学导入日志,或者b,负值问题,但不管怎样,它工作得很好。感谢所有做出贡献的人 试试看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:它现在似乎在工作
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()
错误版本。