Python对数组排序的最有效方法是在i中进行搜索

2024-10-01 17:35:25 发布

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

我有一个非常大的numpy数组,看起来像这样(前5个条目):

[[ 1.    0.01  0.02  0.6   0.01  0.5   0.01  0.5   0.5   0.5 ]
 [ 0.5   0.01  0.01  0.6   0.01  0.5   0.5   0.5   0.5   0.6 ]
 [ 0.6   0.01  0.5   0.5   0.5   0.5   0.7   0.01  0.01  0.  ]
 [ 0.01  0.5   0.8   0.02  0.02  0.81  0.01  0.77  0.02  0.01]
 [ 0.5   0.02  0.5   0.    0.5   0.5   0.01  0.6   0.01  0.  ]]

I搜索此数组以查找长度也为10个值的特定序列。 所以我存储传入序列后没有特殊规则,只有0 1 2 3。。。同样我搜索这个数组。这是我的搜索方法(silo\u arrays[][]是上面的数组,array\u pattern[]是一个1D numpy 10个值的长数组,我在silo\u数组中搜索它)

   new_pattern=True
   for z in range(0, self.silo_arrays_c):
    eq_rate = 0
    for y in range(0, self.length):
        if(self.silo_arrays[z][y] != array_pattern[y]):
            break
        else:
            eq_rate += 1

    if(eq_rate == self.length):
     new_pattern = False
     break

如果silo_数组的长度约为1585个条目,则大约需要0.006257秒。有没有人知道如何通过某种排序或结构变化来加速搜索过程? 感谢您的支持:)


Tags: inselfnumpynewforrate条目序列
1条回答
网友
1楼 · 发布于 2024-10-01 17:35:25

当谈到数据优化时,您通常要处理的是权衡,而不是整体加速。你知道吗

因此,在使用以下解决方案之前,请确保您了解它带来的限制,即增加了写入时间。你知道吗

一种流行的算法是实现二进制搜索。如果你不熟悉这个概念:

给定一个有序的数字列表L,和一个数字列表v,您必须检查v in L。您可以这样做,将列表一分为二,然后将这两个间隔的中间值与您的值v进行比较。假设升序,您将根据以下规则选择间隔:if v < L[middleindex]: I = lower_half else I = upper_half然后通过重复继续搜索。这样可以将搜索空间减少到最小。你知道吗

为了在项目中使用二进制搜索,在数组中插入数组时需要对数组进行排序。要比较的值将是按降序排列的数组元素。这样你可能会提高搜索速度。你知道吗

使用二进制搜索的好处是,在两种情况下(最坏和最佳情况),它的性能是相同的,即O(logn)。这使它相当可靠。你知道吗

对不起,我在手机上。你知道吗

相关问题 更多 >

    热门问题