26

私は配列を持っています

x = [1500, 1049.8, 34, 351, etc]

配列全体の log_10() を取得するにはどうすればよいですか?

4

5 に答える 5

46

numpyがあなたに代わってそれを行います。

import numpy
numpy.log10(mat)

ノート

matこれが機能するためにnumpy配列である必要はなくnumpy、他の回答が示唆するようにリスト内包表記を使用するよりも高速である必要があります。

于 2012-07-25T19:06:32.723 に答える
21
from math import log
[log(y,10) for y in x]
于 2012-07-25T19:06:11.337 に答える
9

最も簡単な方法は、リスト内包表記を使用することです


例:

>>> x = [1500, 1049.8, 34, 351]
>>> import math
>>> [math.log10(i) for i in x]
[3.1760912590556813, 3.021106568432122, 1.5314789170422551, 2.545307116465824]
>>> 

別の方法は、マップ関数を使用することです


例:

>>> map(math.log10, x)
[3.1760912590556813, 3.021106568432122, 1.5314789170422551, 2.545307116465824]
>>> 
于 2012-07-25T19:07:19.043 に答える
9

map組み込み関数を使用することもできます。

import math
new_list = map(math.log10, old_list)

これはおそらく、リスト内包表記よりもわずかに高速です。主に 2 つの類似点を示すためにここに追加します。

編集(@HankGayによるコメントへの応答)

この場合、マップがわずかに高速であることを証明するために、小さなベンチマークを作成しました。

import timeit

for i in range(10):
    t=timeit.timeit("map(math.log10,a)",setup="import math; a=range(1,100)")
    print "map",t
    t=timeit.timeit("[math.log10(x) for x in a]",setup="import math; a=range(1,100)")
    print "list-comp",t

私のラップトップ(OS-X 10.5.8、CPython 2.6)での結果は次のとおりです。

map 24.5870189667
list-comp 32.556563139
map 23.2616219521
list-comp 32.0040669441
map 23.9995992184
list-comp 33.2653431892
map 24.1171340942
list-comp 33.0399811268
map 24.3114480972
list-comp 33.5015368462
map 24.296754837
list-comp 33.5107491016
map 24.0294749737
list-comp 33.5332789421
map 23.7013399601
list-comp 33.1543111801
map 24.41685009
list-comp 32.9259850979
map 24.1111209393
list-comp 32.9298729897

ただし、速度がすべてではないことを認識することが重要です。「読みやすさ重視」。map読みにくいものを作成する場合は、間違いなくリスト内包表記を使用してください。

于 2012-07-25T19:09:42.440 に答える
5
import math
x = [1500, 1049.8, 34, 351]
y = [math.log10(num) for num in x]

これはリスト内包と呼ばれます。それが行っているのはmath.log10、元のの対応する要素に適用した結果である要素を持つ新しいリストを作成することです。これは、btwlistではありません。array

于 2012-07-25T19:07:13.433 に答える