如果t是浮点数,如何存储f(t)?

时间:2016-12-09 10:26:48

标签: python python-3.x

我需要计算压力波动p(这个代码已经很好了);但我还需要在不同的时间位置存储p的值,以便我有一个函数p(t)并可以在以后绘制它。

问题是:t的值是浮点数。带有t - 值的列表如下所示:

t = [88.386, 88.986, 90.386, ...]

并且其中一些值也会多次出现,这意味着,如果p(t=88.986)计算多次,则只需要将这两个值相加。

我该如何处理?

我将不胜感激。

3 个答案:

答案 0 :(得分:1)

您可以使用装饰器来包装您的函数并以适当的方式缓存值。

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已经不存在于字典中,In [43]: @cache_value ....: def p(n): ....: return 2 ....: In [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 In [48]: cache Out[48]: defaultdict(<class 'float'>, {4.15: 2.0, 5.07: 2.0, 6.33: 4.0}) 将向缓存添加新项目,否则将新值与前一项相加。

演示:

var self = {
  books: ko.observableArray([ {id : 1, title: "A"},{id : 2, title: "B" } ])
};

答案 1 :(得分:1)

从你的答案;你想使用position作为键,并为此有一些价值。这基本上意味着你想使用dict而不是list。您可以通过说dict_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

答案 2 :(得分: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]