2016-05-12 50 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