Добавить 2D-массив во время цикла - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу сохранить определенные значения в двумерном массиве. В приведенном ниже коде. Я хочу, чтобы sT было total. Когда внутренний цикл запускает значения, которые должны быть сохранены в строках, а затем в следующем столбце, когда происходит приращение внешнего цикла.

class pricing_lookback:
  def __init__(self,spot,rate,sigma,time,sims,steps):
    self.spot = spot
    self.rate = rate
    self.sigma = sigma
    self.time = time
    self.sims = sims
    self.steps = steps
    self.dt = self.time/self.steps

  def call_floatingstrike(self):

      simulationS = np.array([])
      simulationSt = np.array([])
      call2 = np.array([])
      total = np.empty(shape=[self.steps, self.sims])
      for j in range(self.sims):
          sT = self.spot
          pathwiseminS = np.array([])
          for i in range(self.steps):
              phi= np.random.normal()
              sT *= np.exp((self.rate-0.5*self.sigma*self.sigma)*self.dt + self.sigma*phi*np.sqrt(self.dt))
              pathwiseminS = np.append(pathwiseminS, sT)
              np.append(total,[[j,sT]])###This should store values in rows of j column
              #print (pathwiseminS)
          #tst1 = np.append(tst1, pathwiseminS[1])
          call2 = np.append(call2, max(pathwiseminS[self.steps-1]-self.spot,0))
          #print (pathwiseminS[self.steps-1])
          #print(call2)
          simulationSt = np.append(simulationSt,pathwiseminS[self.steps-1])
          simulationS =  np.append(simulationS,min(pathwiseminS))
      call = max(np.average(simulationSt) - np.average(simulationS),0)
      return call, total#,call2, 

1 Ответ

0 голосов
/ 18 апреля 2019

Вот простой пример того, что, я думаю, вы пытаетесь сделать:

for i in range(5):
    row = np.random.rand(5,)
    if i == 0:
        my_array = row
    else:
        my_array = np.vstack((my_array, row))
    print(row)

Однако, это не очень эффективно с памятью, особенно если вы имеете дело с большими массивами, так как это должновыделить новую память на каждом цикле.Было бы гораздо лучше предварительно выделить пустой массив, а затем заполнить его, если это возможно.

Чтобы ответить на вопрос о том, как добавить столбец, это будет выглядеть примерно так:

import numpy as np

x = np.random.rand(5, 4)
column_to_append = np.random.rand(5,)
np.insert(x, x.shape[1], column_to_append, axis=1)

Опять же, это не эффективно с памятью и следует избегать, когда это возможно.Предраспределение намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...