index 1 is out of bounds for axis 1 with size 1
Не могу пофиксить ошибку в данном коде:
for j in range(0, Bank_size):
kalman_filter.calculate_covariance(F[:, :, j], G[:, :, j], H, P[:, :, j], R)
H = [1, math.sin(w*t[j])]
P[:, :, j] = kalman_filter.P
P_residual = kalman_filter.P_residual
# diag - instead calc it once before - maybe turn it back
Y = y[(realization_count * Z_dimension):(realization_count * Z_dimension + Z_dimension)]
**kalman_filter.calculate_state(F[:, :, j], H, X[ :, realization_count, j], Y)**
X[:, realization_count, j] = kalman_filter.X
RES = kalman_filter.RES
P_residual_1 = kalman_filter.P_residual_1
LKH[realization_count, j] = math.exp(-0.5 * np.dot(np.dot(RES, P_residual_1), RES.transpose())) * PDF_N[j]
Ошибка в строчке выделена черным: index 1 is out of bounds for axis 1 with size 1 Я понимаю что это ошибка из-за того что индекс не соответствует размеру матрицы, но исправить у меня не получается.
Матрицы имеют следующий вид:
realization_count = 1
time = 3
point_count = int(time / dt)
Z_dimension = 1
X_dimension = 2
Theta_count = 2
Max_dimension = max(X_dimension, Theta_count)
theta_ranges = np.array([[100, 150, count], [0.02, 0.03, count]])
# Additional settings
# Stability
# Preparing data
# Thetas
Thetas = np.zeros(Theta_count, dtype=object)
Thetas[0] = np.arange(theta_ranges[0, 0], theta_ranges[0, 1], theta_ranges[0, 2])
Thetas[1] = np.arange(theta_ranges[1, 0], theta_ranges[1, 1], theta_ranges[1, 2])
# Fill hypothesis
merger = mg.Merger(Thetas)
hypos = merger.merge()
Bank_size = np.size(hypos,1)
# Main matrixes
H = np.zeros((Z_dimension, X_dimension))
R = np.zeros((Z_dimension, Z_dimension))
F = np.zeros((X_dimension, X_dimension, Bank_size))
G = np.zeros((X_dimension, 1, Bank_size))
# Apriori
X = np.zeros((X_dimension,realization_count, Bank_size))
THETA = np.tile(hypos, (realization_count, 1, 1))
THETA = np.transpose(THETA, (1, 0, 2))
diag_P = np.zeros((X_dimension, realization_count, Bank_size))
P = np.zeros((X_dimension, X_dimension, Bank_size))
Ответы (1 шт):
kalman_filter.calculate_state(F[:, :, j], H, X[ :, realization_count, j], Y)
> index 1 is out of bounds for axis 1 with size 1
Что мы понимаем из этой ошибки? Что нужно искать в этой строке обращение ко второму измерению массива (оси axis имеют нумерацию с нуля), индекс с которым обращаются к этому измерению имеет значение 1, при том, что размер этого измерения массива тоже 1. А нумерация всего в питоне идёт с нуля, поэтому и получается, что в этом измерении всего 1 элемент, обращаться к нему нужно по индексу 0, а вы обращаетесь к индексу 1.
Что в этой строке может подходить под это описание? К массиву F во втором измерении обращение идёт по всем индексам :, так что не подходит. Массив H берётся целиком, Y тоже. А вот это обращение, кажется, подходит:
X[ :, realization_count, j]
Смотрим, чему собственно равен realization_count и как инициализируется массив X:
realization_count = 1
X = np.zeros((X_dimension,realization_count, Bank_size))
^^^^^^^^^^^^^^^^^
...
kalman_filter.calculate_state(F[:, :, j], H, X[ :, realization_count, j], Y)
^^^^^^^^^^^^^^^^^
Ага, ну вот и оно. Второе измерение массива X имеет размерность 1, обращаетесь вы к этой размерности с индексом 1 и таким образом выходите за размеры массива. Обращение по индексу 0 уберёт ошибку, но я не уверен, что это исправит логику вашего кода. Сначала разберитесь зачем вам нужно это измерение именно размера 1, что будет, если там будет не 1, какая вообще была задумка у вас. А потом уже правьте код.