从现有点找到权重,以使用加权平均值相对于三角形定位点

2024-09-30 08:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我的理解是,我可以使用加权平均法将一个点定位在三维空间中三角形内的任意位置:

import numpy as np
triangle = np.arange(9)
triangle.shape = (3,3)
weights = np.array([1, 0.3, 20])
point = np.average(triangle, weights=weights, axis=0)

现在我用加权平均法把一个点放在一个三角形里。 我的问题是如何做相反的事情。如果我有一个三角形,并且我已经有一个点在里面,我能从这个点和三角形之间的关系中得到权重吗,这样我就可以用加权平均来重新定位这个点了?例如,如果三角形移动了,我希望点移动时保持在相对于三角形的相同位置。我意识到这可以通过重心计算来完成。我希望有一个更简单的加权平均法


Tags: 定位importnumpyasnparraypointaverage
1条回答
网友
1楼 · 发布于 2024-09-30 08:37:29

假设这些点存储在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])

现在反转过程:给定pointtriangle,找到权重:

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])

相关问题 更多 >

    热门问题