例如,我有两个实体列表和一个测量它们之间距离的函数。假设是姓名和电子邮件。在下面的表格中,我测量了每封电子邮件到每个名字的距离。
1@ - {A:0.2, B:0.3, C:0.4, D:0.6}
2@ - {A:0.15, B:0.2, C:0.2, D:0.5}
3@ - {A:0.1, B:0.05, C:0.03, D:0.2}
现在我想在名称中找到每个电子邮件的最小距离对。但是,请注意,如果两封电子邮件具有相同的最小距离名称候选人,则赢得距离最小的人。在这种情况下,另一个电子邮件应该选择第二接近的候选名称,并再次检查。
因此,在这种情况下,结果应为:
1@: B
2@: A
3@: C
解释表:
速度很重要。。它可以以数据帧或dicts的形式进行处理,这无关紧要<谢谢你的帮助。
UPD:
当电子邮件的数量
假设您拥有此数据帧:
emails/names A B C D
0 1@ 0.20 0.30 0.40 0.6
1 2@ 0.15 0.20 0.20 0.5
2 3@ 0.10 0.05 0.03 0.2
然后:
df = df.set_index("emails/names")
numpy_df = df.to_numpy()
forbidden_rows, forbidden_cols = [], []
while len(forbidden_rows) != len(df):
row, col = np.unravel_index(numpy_df.argmin(), df.shape)
numpy_df[:, col] = np.inf
numpy_df[row, :] = np.inf
forbidden_rows.append(df.index[row])
forbidden_cols.append(df.columns[col])
for r, c in zip(forbidden_rows, forbidden_cols):
print(r, c)
印刷品:
3@ C
2@ A
1@ B
编辑:首先将数据帧转换为numpy.ndarray
。
编辑:要打印未分配的电子邮件:
对于这个数据框:
emails/names A B C D
0 1@ 0.20 0.30 0.40 0.6
1 2@ 0.15 0.20 0.20 0.5
2 3@ 0.10 0.05 0.03 0.2
3 4@ 0.10 0.05 0.03 0.2
4 5@ 0.11 0.25 0.43 0.2
5 6@ 0.12 0.35 0.53 0.3
这:
df = df.set_index("emails/names")
numpy_df = df.to_numpy()
forbidden_rows, forbidden_cols = [], []
while len(forbidden_rows) != len(df) and len(forbidden_cols) != len(df.columns):
row, col = np.unravel_index(numpy_df.argmin(), df.shape)
numpy_df[:, col] = np.inf
numpy_df[row, :] = np.inf
forbidden_rows.append(df.index[row])
forbidden_cols.append(df.columns[col])
for r, c in zip(forbidden_rows, forbidden_cols):
print(r, c)
print("Unassigned emails:")
print(df.index[~df.index.isin(forbidden_rows)].values)
印刷品:
3@ C
4@ B
5@ A
6@ D
Unassigned emails:
['1@' '2@']
我有一个多边形类型的几何体,我正在计算一个点的最小距离可能在多边形几何体内部(由360个点组成,作为闭合几何体)或多边形几何体外部。使用postgis的ST_distance方法,当点在几何体外部时,我得到精确的距离,但如果点在几何体内部,则得到0作为距离,我想要与多边形几何体最近点的点之间的最小距离,无论该点位于几何体内部还是外部。
问题: 这是LeetCode的问题: 给定一个整数数组,返回所有对之间的 k 个最小距离。一对(A,B)的距离定义为A和B之间的绝对差。 例子: 我的问题 我用一个简单的方法解决了它O(n^2),基本上我找到所有的距离并对其进行排序,然后找到第k个最小的。现在这是一个更好的解决方案。这不是我的代码,我在leetcode的讨论论坛上找到了它。但是我很难理解代码的关键部分。 下面的代码基本上是在做一个
问题内容: 我有一个一维数字数组,想计算所有成对的欧几里得距离。我有一种方法(感谢SO)在广播中执行此操作,但是它效率低下,因为它两次计算每个距离。而且它的伸缩性不好。 这是一个示例,它为我提供了1000个数字的数组。 我可以使用scipy / numpy / scikit-learn中最快的实现来执行此操作,因为它必须扩展到一维数组具有> 10k值的情况。 注意:矩阵是对称的,所以我猜想通过解决
注意:矩阵是对称的,所以我猜测,通过寻址它,至少有可能获得2倍的加速,我只是不知道如何实现。
我对任何逻辑都是新手,希望执行以下任务。我在GIS环境中有几种类型的固定代理,希望通过网络将它们连接起来。连接的条件如下:让代理类型A有4个代理,代理类型B有20个代理。我想根据最短(直线)距离连接B和A。也就是说,B型代理将连接到最近的A型代理。 非常感谢。
假设我有一个包含整数的数组。 如何找到大小的子集,使得子集中所有整数对之间的距离,我的意思是它们在最远的距离。 示例:数组和, ,最小距离为10和6之间的<错误的子集: ,最小距离为 ,最小距离为 我想到了一个解决办法: 1) 排序数组2)选择一个[0],现在在数组中查找ceil(a[0])=Y。。。。然后ceil(Y