Python 如何在OO中轻松高效地存储numpy UFUNC的仿真数据
在jupyter笔记本中,OO对资源进行了建模,但在控制循环中,需要在多个对象上聚合数据,这与UFUNC和类似操作相比效率低下Python 如何在OO中轻松高效地存储numpy UFUNC的仿真数据,python,numpy,oop,jupyter,Python,Numpy,Oop,Jupyter,在jupyter笔记本中,OO对资源进行了建模,但在控制循环中,需要在多个对象上聚合数据,这与UFUNC和类似操作相比效率低下为了打包功能,我选择了OO,但为了高效简洁的代码,我可能必须将数据提取到一个存储类中(可能),并将所有ri[0]行推送到一个2d数组中,在本例中为(2,K)。 该类不需要日志,只需要最后的条目 K = 100 class Resource: def __init__(self): self.log = np.random( (5,K) )
为了打包功能,我选择了OO,但为了高效简洁的代码,我可能必须将数据提取到一个存储类中(可能),并将所有ri[0]行推送到一个2d数组中,在本例中为(2,K)。 该类不需要日志,只需要最后的条目
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
这将极大地提高性能,但是如果单独存储数据,我很难将数据链接到类。你将如何处理这个问题?熊猫数据帧、np视图还是浅拷贝
[[...] #r0
[...] ]#r1 same data into one array, efficient but map back to class difficult
以下是我对它的看法:
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)