Предполагая, что точки хранятся в строках triangle
, и точки не все лежат в одной строке, вы можете использовать:
weights = np.linalg.solve(triangle.T, point)
Вот пример.Я буду использовать модифицированную версию вашего triangle
, чтобы точки не были в линии:
In [57]: triangle
Out[57]:
array([[9, 1, 2],
[3, 4, 5],
[6, 7, 8]])
Используя тот же weights
, вычислите point
как средневзвешенное значение строк triangle
:
In [58]: weights
Out[58]: array([ 1. , 0.3, 20. ])
In [59]: point = np.average(triangle, weights=weights, axis=0)
In [60]: point
Out[60]: array([6.09859155, 6.67605634, 7.67605634])
Теперь переверните процесс: с учетом point
и triangle
найдите веса:
In [61]: w = np.linalg.solve(triangle.T, point)
In [62]: w
Out[62]: array([0.04694836, 0.01408451, 0.93896714])
Обратите внимание, что w
нормализовано, поэтому его сумма равна 1Если мы нормализуем weights
, мы видим, что оно соответствует w
:
In [63]: weights / weights.sum()
Out[63]: array([0.04694836, 0.01408451, 0.93896714])