2016-03-04 69 views
-1

我有两个大约80 000行(和几列)的二维数组。我有两个嵌套循环,需要很长时间来处理(因为80000 * 80000很大)。Python - 优化数组例程

第一个块从一些外部数据创建一个数组。

arrayIn = [[]] 
del arrayIn[0] 
# use arrayIn.append() to add mixed lists to each row 
# example arrayIn.append(['dogs2443', 'cats12332', 3]) 

然后我从这个数组中复制一个ID到一个新的数组中,但检查以确保ID只添加一次。我尝试使用in命令,但它不起作用,因为我将一个String与一个数组元素进行比较。

allNodes = [[]] 
del allNodes[0] 
for row in arrayIn 
    add = True 
    for node in allNodes: 
     if row[0] == node[0]: 
      add = False 
    if add: 
     allNodes.append(row[0]) 

然后将其复制在新数组回到原来的数组索引,使新的访问阵列中的元素更容易:

for row in arrayIn: 
    for index, node in enumerate(allNodes, start=0) 
     if row[0] == node[0] 
      row[0] = index 

因此,有不少东西:

  1. 我的数组创建方法意味着我必须笨拙地del的第一个元素。
  2. 我使用的ID是字符串数据类型。会使它成为一个整数/长的速度?
  3. 会使用完全不同的结构来加速它吗? Numpy还是别的?
  4. 它似乎逐渐变慢。有什么我可以做的记忆?它运行在一台功能强大的计算机上。
  5. 也许有一个巧妙的方法来结合我没有想到的这两个步骤。

回答

0

你有没有想过使用发生器?然后你可以管理不同的步骤/阶段,这将导致显着的加速。