2016-05-12 25 views
0

我有200000行的文件,第三列是它应该是sorted.I这里只给前20行排序一个阵列由另一个在Python

second.txt 

0 0 1.200000 
0 1 1.200000 
0 2 1.200000 
0 3 1.200000 
0 4 1.200000 
0 5 1.200000 
0 6 1.200000 
0 7 1.200000 
0 8 1.200000 
0 9 1.200000 
0 10 1.200000 
0 11 1.200000 
0 12 1.200000 
0 13 1.200000 
0 14 1.200000 
0 15 1.200000 
0 16 1.200000 
0 17 1.200000 
0 18 1.200000 
0 19 1.200000 

阵列应当被用作参考速度

newindex1.txt 

0 0 
1 0 
2 0 
3 0 
4 0 
5 0 
6 0 
7 0 
8 0 
9 0 
10 0 
11 0 
12 0 
13 0 
14 0 
15 0 
16 0 
17 0 
18 0 
19 0 

我要的是采取第三列的值,并将其放置到适当newindex1.txt索引对。

所需的输出

0 0 1.200000 
    1 0 1.200000 
    2 0 1.200000 
    3 0 1.200000 
    4 0 1.200000 
    5 0 1.200000 
    6 0 1.200000 
    7 0 1.200000 
    8 0 1.200000 
    9 0 1.200000 
    10 0 1.200000 
    11 0 1.200000 
    12 0 1.200000 
    13 0 1.200000 
    14 0 1.200000 
    15 0 1.200000 
    16 0 1.200000 
    17 0 1.200000 
    18 0 1.200000 
    19 0 1.200000 

所有的例子都只是20行,真正的文件是巨大的。

我已经试过这

import numpy as np 
from numpy import loadtxt 
from operator import itemgetter 

s = loadtxt("second.txt", delimiter=" ", unpack=False) 
ni = loadtxt("newindex1.txt", delimiter=" ", unpack=False) 

for i, l in enumerate(ni): 
    for m,n,v in s: 
     s[m,n,v] == ni[i,l] 

它不工作

s[m,n,v] == ni[i,l] 
IndexError: too many indices 

任何想法如何解决这个问题?

+2

你能告诉你想输出的例子实现? – Keatinge

+0

's'只有2维,但你试图用3个索引('m','n','v')来索引它。最后一行你想做什么?更不要说循环,'m','n'和'v'这些都是's'中的* entries *,它们都不是索引(同样适用于'l')。所有代码中唯一的索引是'i'。 – brettb

+0

@Racialz看看编辑后的输出,请! –

回答

1

万一newindex1.txt由一个未知的规则排序,我想你可以使用的字典由索引()来获得速度:

import numpy as np 
from numpy import loadtxt 
from operator import itemgetter 

s = loadtxt("second.txt", delimiter=" ", unpack=False) 
ni = loadtxt("newindex1.txt", delimiter=" ", unpack=False) 

index = {} 

for m,n,v in s: 
    index [(m,n)] = v 

for i,l in ni: 
    key = (i,l) 

    if key in index.keys(): 
     print (i, l, index [key]) 
+0

它工作正常,只有缓慢是问题! –

+0

尝试使用对而不是字符串键。查看上面更新的代码。 – Dmitry