Учитывая набор терминов ||(p_i' - sum{w_ji*(R_j*p_i+v_j)})||^2
, где ||...||^2
обозначает квадратную норму, я хочу эффективно настроить массив (или список) в Python, заполненный этими терминами.p_i'
, p_i
, v_j
- трехмерные векторы, а R_j
- матрица 3x3.
Я уже пробовал это, но не знаю, как включить сумму вj
.
new_points = r_mesh.points() # p', return Nx3 array
old_points = avg_mesh.points() # p
n_joints = 3
rv = np.arange(n_joints * 15) # R_j and v_j are stored in rv
weights = np.random.rand(n_joints, len(new_points)) # w
func = [[np.linalg.norm(
new_points[i] - (weights[j, i] * ((np.array(rv[j * 15:j * 15 + 9]).reshape(3, 3) @ old_points[i]) + np.array(
rv[j * 9 + 9: j * 9 + 12])))) for j in range(n_joints)] for i in range(len(new_points))]
Чтобы прояснить ситуацию, приведем исходное уравнение, которое я преобразовал в нелинейную функцию, чтобы подать ее в метод Левенберга-Марквардта.
РЕДАКТИРОВАТЬ: Извините, раньше было неправильное изображение.