【问题标题】:How to ease and efficient store simulation data for numpy ufuncs in OO如何在 OO 中轻松高效地存储 numpy ufuncs 的模拟数据
【发布时间】:2018-12-29 15:05:32
【问题描述】:

在一个 jupyter 笔记本中,我对资源进行了 OO 建模,但在控制循环中需要聚合多个对象的数据,与 ufunc 和类似操作相比效率低下。
为了打包功能,我选择了 OO,但为了高效简洁的代码,我可能必须将数据提取到存储类中(也许)并将所有 ri[0] 行推入二维数组,在这种情况下(2, ķ)。 该类不需要日志,只需要最后的条目。

K = 100
class Resource:

    def __init__(self):
        self.log = np.random( (5,K) )
        # log gets filled during simulation

r0 = Resource()
r1 = Resource()

# while control loop:
    #aggregate control data
    for k in K:
        total_row_0 = r0.log[0][k] + r1.log[0][k]
    #do sth with the totals and loop again

这将大大提高性能,但如果单独存储,我很难将数据链接到类。你会如何处理这个问题? pandas DataFrames、np View 或 Shallow Copy?

[[...] #r0
 [...] ]#r1 same data into one array, efficient but map back to class difficult 

【问题讨论】:

    标签: python numpy oop jupyter


    【解决方案1】:

    这是我的看法:

    import numpy as np
    
    K = 3
    class Res:
        logs = 2
        def __init__(self):
            self.log = None
    
        def set_log(self, view):
            self.log = view
    
    batteries = [Res(),  Res()]
    d = {'Res': np.random.random( (Res.logs * len(batteries), K) )}        
    
    for i in range(len(batteries)):
        view = d['Res'].view()[i::len(batteries)][:]
        batteries[i].set_log(view)
    
    print(d)
    batteries[1].log[1][2] = 1#test modifies view of last entry of second Res of second log
    print(d)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多