Подтвердить что ты не робот

Как взять журнал всех элементов списка

У меня есть массив

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

Как я могу взять log_10() всего массива?

4b9b3361

Ответ 1

from math import log
[log(y,10) for y in x]

Ответ 2

numpy сделает это за вас.

import numpy
numpy.log10(mat)

Примечание

mat не должен быть массивом numpy для этого, и numpy должен быть быстрее, чем использовать понимание списка, как предлагают другие ответы.

Ответ 3

Самый простой способ - использовать понимание


Пример:

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

Другой способ - использовать функцию map


Пример:

>>> map(math.log10, x)
[3.1760912590556813, 3.021106568432122, 1.5314789170422551, 2.545307116465824]
>>> 

Ответ 4

Вы также можете использовать встроенную функцию map:

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

Это, вероятно, будет несущественно быстрее, чем понимание списка. Я добавляю его здесь в основном, чтобы показать сходство между ними.

EDIT (в ответ на комментарий от @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 создает что-то более трудное для чтения, обязательно перейдите к пониманию списка.

Ответ 5

import math
x = [1500, 1049.8, 34, 351]
y = [math.log10(num) for num in x]

Это называется понятием . Что он делает, так это создание нового списка, элементами которого являются результаты применения math.log10 к соответствующему элементу в исходном list, который не является array, btw.