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を配列ではなくする方法、またはプログラムで何がうまくいかないかのアイデアはありますか? 他のすべてはうまく機能しますが、その 1 つの問題だけです。(念のため、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))

これにより、ログ関数が zlist の各数値に適用されます。

于 2012-02-16T20:38:38.680 に答える