Python - 如何将列表转换为日志(列表)

use*_*887 5 python logarithm list

我有一个值列表,并希望将其转换为该列表的日志或将列表的日志传递给函数。我对 R 比较熟悉,你通常可以在任何东西周围扔一些 ()。当我在 Python 中尝试此操作时,出现错误:

TypeError: must be real number, not list
Run Code Online (Sandbox Code Playgroud)

列表如下所示:

pressures[:5]
Out[11]: [1009.58, 1009.58, 1009.55, 1009.58, 1009.65]
Run Code Online (Sandbox Code Playgroud)

我尝试获取日志的位置并不重要,我得到了同样的错误......在一个函数中:

plt.plot(timestamps, log(pressures))
plt.xlabel('Timestamps')
plt.ylabel('Air Pressure')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在解析数据时:

pressures = log([record['air_pressure'] for record in data])
Run Code Online (Sandbox Code Playgroud)

cwa*_*ole 6

有几种方法可以处理这个问题。Python 在math模块中有一些基本的内置函数。一个是log。它接受一个浮点数或一个整数作为参数并输出一个浮点数:

> from math import log
> log(20)
2.995732273553991
Run Code Online (Sandbox Code Playgroud)

要使用此函数处理列表,您需要在列表中的每个项目上调用它:

> data = [1, 2, 3]
> [log(x) for x in data]
[0.0, 0.6931471805599453, 1.0986122886681098]
Run Code Online (Sandbox Code Playgroud)

另一方面,我提到这一点是因为看起来您已经在使用一些相关的库,numpy可以一次处理整个列表。

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

如果你想使用numpy并取回一个列表,你可以这样做:

> list(np.log([1, 2, 3]))
[0.0, 0.69314718055994529, 1.0986122886681098]
Run Code Online (Sandbox Code Playgroud)


kin*_*all 3

您只能使用log()一个号码。因此,您需要编写一个循环来迭代列表并应用于log()每个数字。

幸运的是,您已经编写了一个循环,经过一些修改即可实现这一目的。代替:

pressures = log([record['air_pressure'] for record in data])
Run Code Online (Sandbox Code Playgroud)

写:

pressures = [log(record['air_pressure']) for record in data]
Run Code Online (Sandbox Code Playgroud)

  • 如果你有一个“压力”列表,你想要已经生成的“日志”,并且给定“log()”是完整的操作,我偏向“压力_日志=地图(日志,压力)”。但其实和上面是等价的。 (2认同)