在 jupyter notebook 中,我對(duì)資源進(jìn)行 OO 建模,但在控制循環(huán)中需要聚合多個(gè)對(duì)象的數(shù)據(jù),與 ufunc 和類似操作相比效率低下。為了打包功能,我選擇了面向?qū)ο?,但為了高效?jiǎn)潔的代碼,我可能必須將數(shù)據(jù)提取到存儲(chǔ)類中(可能)并將所有 ri[0] 行推送到二維數(shù)組中,在本例中為 (2,K)。該類不需要日志,只需要最后一個(gè)條目。K = 100class Resource: def __init__(self): self.log = np.random( (5,K) ) # log gets filled during simulationr0 = 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這將大大提高性能,但如果單獨(dú)存儲(chǔ),我很難將數(shù)據(jù)鏈接到類。你會(huì)如何處理這個(gè)問(wèn)題?pandas DataFrames、np View 還是淺拷貝?[[...] #r0 [...] ]#r1 same data into one array, efficient but map back to class difficult
1 回答

海綿寶寶撒
TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是我的看法:
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)
添加回答
舉報(bào)
0/150
提交
取消