Для первой версии я использовал массив Numpy формы N X M, где N — количество лет. для моделирования (переменная «term»), а M — количество столбцов. Для года 0, то есть для первой «строки» матрицы, я вычисляю соответствующие значения. Затем, используя цикл для лет N – 1, модель вычисляет остальные строки. Выглядит это следующим образом.
Код: Выделить всё
config = {'equity' : 1000000,
'bonds' : 1000000,
'property' : 1000000,
'equity_return' : 0.062,
'bonds_return' : 0.035,
'property_return' : 0.06,
'term' : 20
}
class boxer:
def __init__(self, **parameters):
for k, v in parameters.items():
setattr(self, k, v)
def return_calc(self):
matrix = np.zeros((self.term, 18), dtype=float)
'''initialize first row of matrix'''
## INVESTMENTS & RETURNS
matrix[0][0] = self.equity # equity
matrix[0][1] = self.bonds # bonds
matrix[0][2] = self.property # property
matrix[0][3] = matrix[0][0] * self.equity_return # return on equity
matrix[0][4] = matrix[0][1] * self.bonds_return # return on bonds
matrix[0][5] = matrix[0][2] * self.property_return # return on property
## etc defining another 13 'columns'
'''initialize rest of row of matrix'''
for i in range(matrix.shape[0]):
if i > 0:
## INVESTMENTS & RETURNS
matrix[i][0] = matrix[i-1][9] # equity
matrix[i][1] = matrix[i-1][10] # bonds
matrix[i][2] = matrix[i-1][11] # property
matrix[i][3] = matrix[i][0] * self.equity_return # return on equity
matrix[i][4] = matrix[i][1] * self.bonds_return # return on bonds
matrix[i][5] = matrix[i][2] * self.property_return # return on property (net rent)
output = pd.DataFrame(matrix, columns=
['Equity','Bonds','Property','Return_Equity','Return_Bonds','Return_Property'])
return output
Подробнее здесь: https://stackoverflow.com/questions/791 ... r-approach
Мобильная версия