0

大きなサンプルのモードと標準偏差を計算するために、次のコードを書きました。

import numpy as np
import csv
import scipy.stats as sp
import math

r=open('stats.txt', 'w') #file with results
r.write('Data File'+'\t'+ 'Mode'+'\t'+'Std Dev'+'\n')
f=open('data.ls', 'rb') #file with the data files

for line in f:
    dataf=line.strip()
    data=csv.reader(open(dataf, 'rb'))
    data.next()
    data_list=[]
    datacol=[]
    data_list.extend(data)
    for rows in data_list:
            datacol.append(math.log10(float(rows[73])))
    m=sp.mode(datacol)
    s=sp.std(datacol)
    r.write(dataf+'\t'+str(m)+'\t'+str(s)+'\n')
    del(datacol)
    del(data_list)

これはうまく機能しています-そう思います!しかし、コードを実行した後、端末にエラー メッセージが表示され、その意味を誰か教えてもらえないでしょうか?

 /usr/lib/python2.6/dist-packages/scipy/stats/stats.py:1328: DeprecationWarning:     scipy.stats.std is deprecated; please update your code to use numpy.std.
    Please note that:
    - numpy.std axis argument defaults to None, not 0
    - numpy.std has a ddof argument to replace bias in a more general manner.
      scipy.stats.std(a, bias=True) can be replaced by numpy.std(x,
      axis=0, ddof=0), scipy.stats.std(a, bias=False) by numpy.std(x, axis=0,
      ddof=1).
  ddof=1).""", DeprecationWarning)
/usr/lib/python2.6/dist-packages/scipy/stats/stats.py:1304: DeprecationWarning: scipy.stats.var is deprecated; please update your code to use numpy.var.
Please note that:
    - numpy.var axis argument defaults to None, not 0
    - numpy.var has a ddof argument to replace bias in a more general manner.
      scipy.stats.var(a, bias=True) can be replaced by numpy.var(x,
      axis=0, ddof=0), scipy.stats.var(a, bias=False) by var(x, axis=0,
      ddof=1).
  ddof=1).""", DeprecationWarning)
/usr/lib/python2.6/dist-packages/scipy/stats/stats.py:420: DeprecationWarning: scipy.stats.mean is deprecated; please update your code to use numpy.mean.
Please note that:
    - numpy.mean axis argument defaults to None, not 0
    - numpy.mean has a ddof argument to replace bias in a more general manner.
      scipy.stats.mean(a, bias=True) can be replaced by numpy.mean(x,
axis=0, ddof=1).
  axis=0, ddof=1).""", DeprecationWarning)
4

2 に答える 2

5

これらは非推奨の警告であり、通常はコードが機能することを意味しますが、将来のリリースで機能しなくなる可能性があります。

現在、この行がありs=sp.std(datacol)ます。この変更を行うと、この警告が消える可能性がありますnumpy.std()scipy.stats.std()

非推奨の警告を気にせず、コードをそのまま使用したい場合は、warningsモジュールでそれを抑制することができます。たとえばfxn()、DeprecationWarning を生成する関数がある場合、次のようにラップできます。

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()  #this function generates DeprecationWarnings
于 2012-09-01T02:44:17.937 に答える
3

コードが正しく実行されるのDeprecationWarningsを妨げないでください。使用しているコードが間もなく廃止され、適切な構文に更新する必要があることを警告するだけです。

この特定のケースでは、NumPyとSciPyの間のvarstd...関数/メソッドのデフォルト引数の不整合が原因です。物事をクリーンアップするために、関数を削除し、scipy.stats代わりに対応するNumPyを使用することにしました。

もちろん、関数を削除するだけで、コードが突然機能しなくなる一部のユーザーを混乱させることになります。そのため、SciPyDeprecationWarning開発者は、いくつかのリリースにを含めることにしました。これにより、全員がコードを更新するのに十分な時間が残されるはずです。

この場合、scipy.stats.stdシステムのdocstringをチェックして、使用されているデフォルトを確認し、それに応じてコードを変更する方法に関する警告の指示に従う必要があります。

于 2012-09-01T14:16:12.487 に答える