python - 在实数数组中找到最近元素的最快方法
问题描述
对于每个元素的给定实数数组,找到小于当前元素不超过的元素数0.5
并写入新数组。
例如:
原始数组:
[0.1, 0.7, 0.8, 0.85, 0.9, 1.5, 1.7]
结果数组:
[0, 0, 1, 2, 3, 0, 1]
解决这个问题的算法和方法是什么?
重要的是仅在负方向上选择点的邻域,这使得无法使用Kdtree
orBalltree
算法。
我所有的问题都在这里,我尝试编写代码。
解决方案
这将解决您的特定任务。
def find_nearest_element(original_array):
result_array = []
for e in original_array:
result_array.append(len(original_array[(e-0.5 < original_array) & (e > original_array)]))
return result_array
original_array = np.array([0.1, 0.7, 0.8, 0.85, 0.9, 1.5, 1.7])
print(find_nearest_element(original_array))
输出:
[0, 0, 1, 2, 3, 0, 1]
编辑:对于较小的数组(ca. len 10000),使用掩码显然比使用 numba 的版本快。对于更大的阵列,使用 Numba 的版本更快。因此,这取决于您要进行的数组大小。
一些运行时比较(以秒为单位):
For smaller arrays(size=250):
Using Numba 0.2569999694824219
Using mask 0.0350041389465332
For bigger arrays(size=40000):
Using Numba 1.4619991779327393
Using mask 4.280000686645508
我设备上的盈亏平衡点大约是 10000 大小(两者都需要大约 0.33 秒)。
推荐阅读
- javascript - AJAX 文件上传错误 500,文件大小为 20MB
- python - 训练自己的情感分析模型或使用预先训练的模型(如 vader 和 textblob)有什么更好的方法?
- android - “LoginBloc”不扩展“Cubit”
' - c# - 有没有办法在 C# 中获取用户的硬件 ID?
- javascript - 使用钩子使用向上和向下按钮重新排序列表
- javascript - 如何使用 JQuery 动态设置 django 自动完成光场的值
- matlab - 第二个参数必须是符号变量的向量
- android - 如何在 Android 上覆盖 EncryptedFile?
- python - 如何在python中获取5分钟前的时间
- reactjs - 为什么更改没有反映在 React Native 中?