У меня проблема, когда я добавляю два массива 4x1, и в результате получается массив 4x4, в котором первый столбец повторяется 4 раза. В результате мне нужен массив 4x1.
Я инициализировал массив как таковой (m = 4): z = np.zeros((m, len(t))
Позже в своем коде я передаю этот массив в функцию как z[:,k+1]
, поэтому размерность становится массивом 4x1. (Обратите внимание, что когда я печатаю этот массив на своем терминале, он отображается как вектор-строка, а не как вектор-столбец: [0. 0. 0. 0.]
, я тоже не уверен, почему это так). Массив, который я пытаюсь добавить в z
, имеет следующую структуру при выводе на мой терминал:
[[#]
[#]
[#]
[#]]
Очевидно, что добавление втягивает указанный выше массив в каждый элемент z
вместо того, чтобы складывать их соответствующие компоненты вместе, но я не уверен, почему, поскольку они оба должны быть векторами-столбцами. Я был бы признателен за любую помощь с этим.
РЕДАКТИРОВАТЬ: У меня много кода, поэтому я включил сокращенную версию, которая, надеюсь, передаст идею.
n = 4 # Defines number of states
m = 4 # Defines number of measurements
x = np.zeros((n, len(t)), dtype=np.float64) # Initializes states
z = np.zeros((m, len(t)), dtype=np.float64) # Initializes measurements
u = np.zeros((1, len(t)), dtype=np.float64) # Initializes input
...
C = np.eye(m) # Defines measurement matrix
...
for k in range(len(t)-1):
...
x_ukf[:,k+1], P_ukf[k+1,:,:] = function_call(x_ukf[:,k], z[:,k+1], u[:,k], P_ukf[k,:,:], C, Q, R, T) # Calls UKF function
Это приводит в функцию, в которой встречаются следующие значения (обратите внимание, что measurement_matrix = C
(матрица 4x4), X
- это матрица 4x9 и W
вектор-строка 1x9):
Z = measurement_matrix @ X # Calculates measurements based on sigma points
zhat = Z @ W.T
...
state_vec = state_vec + K @ (measurement_vec - zhat) # Updates state estimates
Проблема Я Имея это с выражением (measurement_vec - zhat)
. Вот где результат должен быть вектором 4x1, но я получаю матрицу 4x4 c.