我有一个数组
x = [1500, 1049.8, 34, 351, etc]
如何获取整个数组的log_10()?
答案 0 :(得分:32)
答案 1 :(得分:15)
from math import log
[log(y,10) for y in x]
答案 2 :(得分:9)
最简单的方法是使用list comprehension
示例:强>
>>> 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]
>>>
答案 3 :(得分:9)
您还可以使用map
内置函数:
import math
new_list = map(math.log10, old_list)
这可能比列表理解速度快得多。我在这里添加它主要是为了显示两者之间的相似性。
编辑(响应@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
创建了一些难以阅读的内容,那么一定要进行列表理解。
答案 4 :(得分:5)
import math
x = [1500, 1049.8, 34, 351]
y = [math.log10(num) for num in x]
这称为list comprehension。它正在做的是创建一个新列表,其元素是将math.log10
应用于原始list
中相应元素的结果,该元素不是array
,顺便说一句。