Как упростить и эффективно хранить данные симуляции для numy ufuncs в OO - PullRequest
0 голосов
/ 29 декабря 2018

В ноутбуке Jupyter я OO-моделировал ресурс, но в цикле управления нужно объединять данные по нескольким объектам, что неэффективно по сравнению с ufuncs и подобными операциями.
Чтобы упаковать функциональность, я выбрал 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

Это значительно повысит производительность, но у меня возникают трудности с привязкой данных к классу, если они хранятся отдельно.Как бы вы подошли к этому?pandas DataFrames, np View или Shallow Copy?

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

1 Ответ

0 голосов
/ 29 декабря 2018

Вот мое мнение:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...