我有一个维度为d的n个点的S ,我可以根据需要计算所有成对距离.我需要在这个集合中选择k个点,以便它们成对距离的总和是最大的.在其他稍微更多的数学词中,我想要S中的p1,...,pk使得sum(i,j <k)dist(pi,pj)是最大的.
我知道这个问题是关系到这一个(这基本上是我的一样,但对于k = 2),也许到这一个(使用而不是"最近""最远的").
我对此并不太确定,但也许所有可能的解决方案都有其在凸包中的所有点?
任何合理的近似/启发式都可以.
虚拟奖励点#1用于解决方案,该解决方案适用于给出四个点中的分数的任何函数(其中一个可以是平方距离之和的平方根).
如果解决方案很容易在python + numpy/scipy中实现,那么虚拟奖励点#2.
我最近开始通过编写自组织映射的简单实现来学习Julia.我希望用户指定地图的大小和尺寸,这意味着我不能真正使用for循环来处理地图数组,因为我事先并不知道我需要多少层循环.所以我绝对需要广播和切片功能,这些功能适用于任意维度的数组.
现在,我需要构建一个地图索引数组.说我的地图是由大小的数组定义mapsize = (5, 10, 15),我需要构建一个数组indices大小的(3, 5, 10, 15)地方indices[:, a, b, c]应返回[a, b, c].
我来自Python/NumPy背景,其中解决方案已由特定的"函数"给出,mgrid:
indices = numpy.mgrid[:5, :10, :15]
print indices.shape # gives (3, 5, 10, 15)
print indices[:, 1, 2, 3] gives [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我没想到朱莉娅在一开始就有这样的功能,所以我转向广播.在NumPy中,广播基于一系列规则,我发现这些规则非常清晰和合乎逻辑.只要每个维度中的大小匹配或其中一个为1,您就可以在同一个表达式中使用不同维度的数组:
(5, 10, 15) broadcasts to (5, 10, 15)
(10, 1)
(5, 1, 15) also broadcasts to (5, 10, 15)
(1, 10, 1)
Run Code Online (Sandbox Code Playgroud)
为此,您还可以使用numpy.newaxis或None轻松地向阵列添加新维度:
array = numpy.zeros((5, 15))
array[:,None,:] has shape (5, 1, …Run Code Online (Sandbox Code Playgroud)