Problema cicli for annidati per il riempimento di una matrice

di il
1 risposte

Problema cicli for annidati per il riempimento di una matrice

Ciao a tutti,
sono neofita in Python, e sto riscontrando questi problemi:
1. i cicli for annidati usati per riempire una matrice non mi girano correttamente, le righe della matrice sono sempre uguali ma i dati di imput cambiano. Il riempimento avviene prima per le colonne e poi per le righe (Codice in calce)
2. approfitto per chiedere anche se si possono usare contemporaneamente più cicli while, ho provato ma anche in questo caso non mi girano

Codice:
import numpy as np
from numpy import random
import math

variazione = 0.2
t=0
T=1
tk = np.arange(t,T+variazione,variazione)
NumeroTraiettorie = 5

S0 = 187.07
Media = 0.03745
DevStd = 11.80676443

Prezzi = np.zeros([NumeroTraiettorie,len(tk)])
Prezzi[:,0] = S0

traiettoria = np.zeros(len(tk))
x = np.arange(0,len(Prezzi.T),1)
y =np.arange(1,len(tk),1 )

for i in range(NumeroTraiettorie):
   for j in range(len(tk)):
       if j == 0:
           traiettoria[j] = S0
       else:
           a = traiettoria[j-1]
           b = tk[j] - tk[j-1]
           c = DevStd*X[j]*math.sqrt(b)*traiettoria[j-1]
           traiettoria[j] = a + b + c     
           Prezzi[i,1:] = traiettoria[1:]
   
print(Prezzi)

Output: (metto solo 3 righe ma in ogni caso si ripete la prima su ogni riga della matrice)

GRAZIE INFINITE

AG

1 Risposte

  • Re: Problema cicli for annidati per il riempimento di una matrice

    import numpy as np
    # from numpy import random # non usato! (servirà dopo? Chissà...)
    import math
    """
    una docstring potrebbe spiegare meglio ciò che vuoi ottenere
    """
    variazione = 0.2
    t=0
    T=1
    tk = np.arange(t,T+variazione,variazione)  # poi qualche commento aiuterebbe...
    NumeroTraiettorie = 5
    
    S0 = 187.07
    # Media = 0.03745 # non usato! (servirà dopo? Chissà...)
    DevStd = 11.80676443
    
    Prezzi = np.zeros([NumeroTraiettorie,len(tk)])
    Prezzi[:,0] = S0
    
    
    traiettoria = np.zeros(len(tk))
    # x = np.arange(0,len(Prezzi.T),1) # equivale a range(len(tk))! Nel calcolo di c si può usare j
    # y = np.arange(1,len(tk),1 ) # non usato! (servirà dopo? Chissà...)
    
    for i in range(NumeroTraiettorie):
       for j in range(len(tk)):
           if j == 0:
               traiettoria[j] = S0
           else:
               # anche qui un commento potrebbe essere utile
               a = traiettoria[j-1]
               b = tk[j] - tk[j-1]  # ma ... tk[j] - tk[j-1] non è, per costruzione, == variazione?
               # c = DevStd*x[j]*math.sqrt(b)*traiettoria[j-1]  # io riutilizzerei a e aggiungerei qualche spazio:
               # c = DevStd * x[j] * math.sqrt(b) * a  # e poi posso usare j invece di x[j]
               c = j * DevStd * math.sqrt(b) * a
               traiettoria[j] = a + b + c     
               Prezzi[i,1:] = traiettoria[1:]
               # Tu costruisci traiettoria sempre nello stesso modo, con valori sempre costanti per ogni i.
               # E' quindi ovvio, che tutte le righe di Prezzi siano uguali!
               # Immagino che dovresti utilizzare un valore casuale centrato su S0, invece di S0, a riga 28.
       
    print(Prezzi)
    
Devi accedere o registrarti per scrivere nel forum
1 risposte