2016-05-12 7 views
0

Ich habe eine Datei mit 200000 Linien ist die dritte Spalte Geschwindigkeit, die nur am sorted.I sein sollte erste 20 ZeilenSorting einen Array von einer anderen in 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 

Array geben, die als Referenz verwendet werden sollen,

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 

Was ich will, ist dritten Spalt Wert zu nehmen und sie newindex1.txt Indexpaar anzueignen.

Wunsch Ausgang

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 

Alle Beispiele sind nur 20 Zeilen, sind echte Dateien sehr groß.

Ich habe diese

versucht
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] 

Es ist nicht

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

Irgendwelche Ideen wie diese zu lösen?

+2

Können Sie ein Beispiel für die Ausgabe zeigen Sie versuchen, leisten? – Keatinge

+0

's' ist nur zweidimensional, aber Sie versuchen, es mit 3 Indizes zu indizieren (' m', 'n',' v'). Was versuchst du in der letzten Zeile zu machen? Ganz zu schweigen von der Tatsache, dass die Art und Weise, wie Sie loopen, 'm',' n' und 'v' sind die * Einträge * in' s', keiner von ihnen sind Indizes (das gleiche gilt für 'l'). Der einzige Index in Ihrem gesamten Code ist "i". – brettb

+0

@Racialz Werfen Sie einen Blick auf die bearbeitete Ausgabe, pls! –

Antwort

1

Falls die newindex1.txt von einem unbekannten Regel sortiert ist, glaube ich Ihnen eine dict verwenden könnte eine Geschwindigkeit durch einen Index zu erhalten():

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

Es funktioniert gut, nur Langsamkeit ist ein Problem! –

+0

Versuchen Sie, Paare anstelle von Zeichenfolgenschlüsseln zu verwenden. Siehe aktualisierten Code oben. – Dmitry