Python 如果t是浮点数,如何存储f(t)?
我需要计算压力波动Python 如果t是浮点数,如何存储f(t)?,python,python-3.x,Python,Python 3.x,我需要计算压力波动p(此代码已经运行良好);但是我还需要在不同的时间位置存储p的值,这样我就有了一个p(t)函数,以后可以绘制它 问题是:t的值是浮点数。带有t-值的列表如下所示: t=[88.386,88.986,90.386,…] 其中一些值也会多次出现,这意味着,如果不止一次地计算p(t=88.986),这两个值只需要相加 我该怎么办 如果您能提供帮助,我将不胜感激。您可以使用decorator包装您的函数并以适当的方式缓存值 In [39]: from functools import
p
(此代码已经运行良好);但是我还需要在不同的时间位置存储p
的值,这样我就有了一个p(t)
函数,以后可以绘制它
问题是:t
的值是浮点数。带有t
-值的列表如下所示:
t=[88.386,88.986,90.386,…]
其中一些值也会多次出现,这意味着,如果不止一次地计算p(t=88.986)
,这两个值只需要相加
我该怎么办
如果您能提供帮助,我将不胜感激。您可以使用decorator包装您的函数并以适当的方式缓存值
In [39]: from functools import wraps
In [40]: from collections import defaultdict
In [41]: cache = defaultdict(float)
In [42]: def cache_value(f):
....: global cache
....: @wraps(f)
....: def wrapped(n):
....: result = f(n)
....: cache[n] += result
....: return result
....: return wrapped
这里,defaultdict
将向缓存中添加一个新项,如果它在字典中不存在,否则将把新值与前一个值相加
演示:
[43]中的:@cache\u值
..:def p(n):
返回2
....:
在[44]中:
In[44]:p(6.33)
Out[44]:2
In[45]:p(6.33)
Out[45]:2
In[46]:p(4.15)
Out[46]:2
In[47]:p(5.07)
Out[47]:2
在[48]中:缓存
Out[48]:defaultdict(,{4.15:2.0,5.07:2.0,6.33:4.0})
来自您的答案;您希望使用位置作为关键点,并为此提供一些值。这基本上意味着你想使用dict而不是list。您可以通过说dict\u time[key]=value
为字典赋值。例如:
dict_time = {}
dict_time[0.1] = 2
print(dict_time[0.1])
//2
若要将值相加(若值存在),您可以检查它们的键是否已存在于dict中,然后将其相加(若存在),否则只需将其相加即可:
if key in dict_time:
dict_time[key] += value
else:
dict_time[key] = value
或者您可以按照kasramvd的建议使用defaultdict
,在这种情况下,您可以只使用+=而不检查它们是否存在
稍后,您可以通过询问dict_time[key]来访问该值:
>>> dict_time[0.1]
1
如果您想继续使用列表,可以使用集合来获取所有唯一的时间值,并将这些值与该时间的所有压力元素相加。压力值将存储在该时间值的第一次注册重复的对应索引中:
p = [3, 5, 6, 5]
t = [88.386, 88.986, 90.386, 88.386]
# the added presures will be stored in this list
new_pressures = []
# get all the different time values
unique_times = set(t)
#Create new null element in list for every unique time
for value in unique_times:
new_pressures.append(0)
for index, item in enumerate(t):
if item == value:
#add to the pressure value every time coincidence index
new_pressures[-1] += p[index]
print new_pressures
函数的输出结果是:
[8, 5, 6]
为什么它们是浮动的问题?您可以将浮动添加到列表中,这没有问题。我如何访问
p
时的值1.5
?我只知道p[int]
,但不知道p[float]
我不需要在列表中添加带浮点数的内容。我需要将数据存储在88.386的“位置”上,依此类推,那么dict
将是一个更好的选择。这是否可以解决列表的问题?作为补充,您应该确保p值被舍入到一个可接受的位数,以便使缓存正常工作。@aluriak注意,但这取决于OP的意图,想让我们说“代码>2.33 < /代码>和<代码> 2.3333代码>作为一个键。非常感谢!这种使用集合的可能性实际上对我的情况是最好的。
[8, 5, 6]