Как использовать for-циклы и массивы в Python для расчета распространения ошибок - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь написать цикл for для вычисления баров ошибок, используя производный метод.Формула относительно проста, однако мне кажется, что в моем коде встречаются ошибки в отношении размеров векторов / массивов.В моем коде много определенных векторов, и я проверил длину их всех.Все входы в цикл for являются массивами размером 1x25.

Я пытался изменить индексы в цикле for с диапазона (1,25) на диапазон (0,24), но это, похоже, не работает.

# Creating vectors
dfdvg = np.zeros(25)
dfdxi0 = np.zeros(25)
sigsquare = np.zeros(25)
vgerr = vrs
xi0err = xi0s
Asq = np.zeros(25)
Bsq= np.zeros(25)
sig = np.zeros(25)

# calculating derivatives and error vectors
for i in range(0,24):
    dfdvg[i] = (np.multiply(rms[:,i],delta[:,i]))**-1
    dfdxi0[i] = -vr[:,i]/(vr[:,i]*(np.power(delta[:,i],2)))
    Asq[i] = np.power(np.multiply(dfdvg[i],vgerr[i]),2)
    Bsq[i] = np.power(np.multiply(dfdxi0[i],xi0err[i]),2)
    sigsquare[i] = Asq[i] + Bsq[i]
    sig[i] = np.power(sigsquare[i],0.5)

q = np.power(np.multiply(rms,delta),-1)
left = np.multiply(vg,q)
right = -(beta*H)/(3*(1+zeff))

Мне нужен вектор "sig", представляющий распространенную ошибку для каждого индекса.

1 Ответ

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

Проблема не в размерах массива, проблема в форме.К сожалению, вы не написали все свои массивы.Дело в том, что если бы вы могли просто использовать массивы (25) вместо (1, 25), все работает нормально:

vrs = np.random.rand(25)
vr = np.random.rand(25)
xi0s = np.random.rand(25)
rms = np.random.rand(25)
delta = np.random.rand(25)
vg = np.random.rand(25)

# Creating vectors
dfdvg = np.zeros(25)
dfdxi0 = np.zeros(25)
sigsquare = np.zeros(25)
vgerr = vrs
xi0err = xi0s
Asq = np.zeros(25)
Bsq= np.zeros(25)
sig = np.zeros(25)

# calculating derivatives and error vectors
for i in range(0,24):
    dfdvg[i] = (np.multiply(rms[i],delta[i]))**-1
    dfdxi0[i] = -vr[i]/(vr[i]*(np.power(delta[i],2)))
    Asq[i] = np.power(np.multiply(dfdvg[i],vgerr[i]),2)
    Bsq[i] = np.power(np.multiply(dfdxi0[i],xi0err[i]),2)
    sigsquare[i] = Asq[i] + Bsq[i]
    sig[i] = np.power(sigsquare[i],0.5)

q = np.power(np.multiply(rms,delta),-1)
left = np.multiply(vg,q)

(ваша последняя строка кода кажется не связанной)

ТакНа мой взгляд, ваш лучший вариант - изменить ваши массивы:

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