Конвертировать для l oop в numpy массив - PullRequest
0 голосов
/ 16 февраля 2020
for timeprojection in range(100):
   for term in range(8):
       zerocouponbondprice[timeprojection,term] = zerocouponbondprice[timeprojection-1,term-1]*cashflow[timeprojection,term]

Как я могу преобразовать что-то подобное в numpy форму массива, чтобы я мог уменьшить два на l oop, чтобы увеличить скорость? (Если timeprojection и term являются динамическими c числами.)

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Если я правильно понял вопрос, вы можете заменить два цикла / диапазона, используя соответствующую индексацию. Упрощенный пример:

import numpy as np

# these would be your input arrays zerocouponbondprice and cashflow:
arr0, arr1 = np.ones((10,10)), np.ones((10,10))

# these would be your ranges:
idx0, idx1 = 3, 9

# now you can do the calculation as simple as
arr0[idx0:idx1, idx0:idx1] = arr0[idx0-1:idx1-1, idx0-1:idx1-1] + arr1[idx0:idx1, idx0:idx1]

print(arr0)
[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
  [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
  [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
  [1. 1. 1. 2. 2. 2. 2. 2. 2. 1.]
  [1. 1. 1. 2. 2. 2. 2. 2. 2. 1.]
  [1. 1. 1. 2. 2. 2. 2. 2. 2. 1.]
  [1. 1. 1. 2. 2. 2. 2. 2. 2. 1.]
  [1. 1. 1. 2. 2. 2. 2. 2. 2. 1.]
  [1. 1. 1. 2. 2. 2. 2. 2. 2. 1.]
  [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
0 голосов
/ 16 февраля 2020

Вы можете создать массив numpy из вложенного списка

import numpy as np

zerocouponbondprice = np.array([[k * l for k,l in zip(i,j)] for i,j in zip(zerocouponbondprice, cashflow[1:])])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...