Ошибка Python: не удалось передать входной массив из фигуры (201) в фигуру (1) - PullRequest
0 голосов
/ 23 сентября 2019

У меня следующий код, и я получаю эту ошибку: не удалось передать входной массив из формы (201) в форму (1).Я понимаю причину ошибки, но не могу сделать это правильно.

import math
import numpy as np
import matplotlib.pyplot as plt
import random
from math import sqrt

s = 100     
sigma = 0.1            
dt = 0.005  
M = 200 
I = 1
lambda_plus=2
lambda_minus=2
epsilon_plus=1.0/2
epsilon_minus=1.0/2

S = np.zeros((M+1,I), dtype=np.float)
S[0] = s

for t in range(1, M+1):
    X1 = np.random.poisson(lambda_plus, (M+1))
    X2 = np.random.poisson(lambda_minus, (M+1))

    S1 = [np.sum(X1[0:t]) for t in range(M+1)]
    S2 = [np.sum(X2[0:t]) for t in range(M+1)]
    A = np.random.standard_normal(M+1)
    B = np.asarray(S1)
    C = np.asarray(S2)
    S[t] = S[t-1] + sigma*math.sqrt(dt)*A + epsilon_plus*B-epsilon_minus*C

Ошибка:

Traceback (most recent call last):
  File "E:/Project/Python/snippets/snips.py", line 26, in <module>
    S[t] = S[t-1] + sigma*math.sqrt(dt)*A + epsilon_plus*B-epsilon_minus*C
ValueError: could not broadcast input array from shape (201) into shape (1)

1 Ответ

1 голос
/ 24 сентября 2019

Проблема заключается в следующем выражении:

S[t-1] + sigma*math.sqrt(dt)*A + epsilon_plus*B-epsilon_minus*C

Все три добавляемых вами термина sigma*math.sqrt(dt)*A, epsilon_plus*B и epsilon_minus*C имеют форму (201,), так же как и результат после добавленияна S[t-1] - но вы пытаетесь присвоить его S[t], который имеет форму (1,).

Вам нужно объяснить, что именно вы ожидаете сохранить в S[t], чтобы я мог предоставитьрешение - я не хочу пересматривать / угадывать намерения из вашего кода.

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