2017-11-30 18 views
2

私は値のリストを持っており、そのリストのログに変換したり、リストのログを関数に渡したりしたいと思います。私はRをよく知っていて、何かの周りにいくつかの()を投げることができます。私はPythonでこれをしようとすると、私はエラーを取得する:Python - リストをログ(リスト)に変換する方法

TypeError: must be real number, not list 

一覧を以下のようになります。私は、ログを取るしようとする場所それは本当に問題ではありません

pressures[:5] 
Out[11]: [1009.58, 1009.58, 1009.55, 1009.58, 1009.65] 

、私は同じエラーを取得します。データを解析する一方で

plt.plot(timestamps, log(pressures)) 
plt.xlabel('Timestamps') 
plt.ylabel('Air Pressure') 
plt.show() 

:機能を..in

pressures = log([record['air_pressure'] for record in data]) 
+0

'numpy.log'は、リストの各要素に対して操作を実行し、numpyのを返します。アレイ。 –

+0

また、オプションでもある対数尺度で実際の圧力を確認したい場合は、['plt.semilogy'](https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.semilogy.html) –

答えて

3

log()は1つの番号でのみ使用できます。したがって、リストを繰り返し処理するループを作成し、各番号にlog()を適用する必要があります。

幸いにも、いくつかの変更を加えて、このトリックを行うループをすでに作成しています。代わりに:

pressures = log([record['air_pressure'] for record in data]) 

書き込み:

pressures = [log(record['air_pressure']) for record in data] 
+1

'log'が既に生成されている' 'pressure'のリストがあり、' 'log()' 'が完全な操作であれば、' 'pressures_log = map(log、pressures)' 'の部分です。しかしそれは上記と同じです。 – TemporalWolf

0

ログをやってみたかったし、あなたがそのために数学のlibを使用することができる整数のリストを持っている場合。

import math 

my_data = [1,2,3,4,5,6,7,8,9] 

log_my_data = [math.log(x) for x in my_data] 

print(log_my_data) 
1

これにはいくつかの方法があります。 Pythonには、mathモジュールの基本的な組み込み関数がいくつかあります。 1つはlogです。これは、パラメータとしてフロートまたはint型をとり、floatを出力します

> from math import log 
> log(20) 
2.995732273553991 

この関数でリストを処理するには、リスト内のすべての項目にそれを呼び出すために必要があるだろう:

> data = [1, 2, 3] 
> [log(x) for x in data] 
[0.0, 0.6931471805599453, 1.0986122886681098] 

一方、すでにいくつかの関連ライブラリを使用しているように見えますので、numpyはリスト全体を一度に処理できます。あなたがnumpyを使用し、バックリストを取得したい場合は

> import numpy as np 
> np.log([1, 2, 3]) 
array([ 0.  , 0.69314718, 1.09861229]) # Notice this is a numpy array 

、あなたの代わりにこれを行うことができます:

> list(np.log([1, 2, 3])) 
[0.0, 0.69314718055994529, 1.0986122886681098] 
関連する問題