2016-04-01 16 views
0

Bir diziyi sıralamaya ve python'a ayırmaya çalışıyorum.Dizi sıralama ve bunları kesme/ayırma

Örnek:

x y z 
1 3 83 
2 4 38 
8 1 98 
3 87 93 
4 1 73 
1 3 67 
9 9 18 
1 4 83 
9 3 93 
8 2 47 

Ben ilk önce bu gibi görünmek istiyorum: Yani

x y z 
1 3 83 
1 3 67 
1 4 83 
2 4 38 
3 87 93 
4 1 73 
8 1 98 
8 2 47 
9 9 18 
9 3 93 

x

ben ithal edecek böyle bir veri dosyası var Sütun artan sırada, ardından y sütunu.

Son olarak, bu dizilerden bir dizi oluşturmak istiyorum? Bunu yapabilir miyim? Yani

Ben: vb

array[0] = [[1, 3, 83],[1, 3, 67],[1, 4, 83]] 
array[1] = [[2, 4, 38]] 
array[2] = [[3, 87, 93]] 
array[3] = [[4, 1, 73]] 
array[4] = [[8, 1, 98],[8,2,47]] 

ve ...

dışarı Başlamak:

import numpy as np 
import matplotlib.pyplot as plt 

data_file_name = 'whatever.dat' 

data=np.loadtxt(data_file_name) 
+0

Uygulama girişimlerinizde yaşadığınız sorunlara yardımcı olabilmemiz için lütfen bir [mcve] sağlayabilir misiniz? – idjaw

+0

Pandas paketini kullanmaya hazır mısınız, yoksa saf bir Python çözümü mi istiyorsunuz? – Alexander

+0

Saf python en iyi olurdu - nazikçe – Scientized

cevap

1

İşte bir num py çözeltisi (veri yüklenmesi için kullanılır verilen):

import numpy as np 

data_file_name = 'whatever.dat' 
data = np.loadtxt(data_file_name, 
        skiprows=1, 
        dtype=[('x', float), ('y', float), ('z', float)]) 

data.sort(axis=0, order=['x', 'y', 'z']) 

unique_x_col_vals = set(row[0] for row in data) 
array = {n: [list(row) for row in data if row[0] == val] 
      for n, val in enumerate(unique_x_col_vals)} 

>>> array 
{0: [[1.0, 3.0, 67.0], [1.0, 3.0, 83.0], [1.0, 4.0, 83.0]], 
1: [[2.0, 4.0, 38.0]], 
2: [[3.0, 87.0, 93.0]], 
3: [[4.0, 1.0, 73.0]], 
4: [[8.0, 1.0, 98.0], [8.0, 2.0, 47.0]], 
5: [[9.0, 3.0, 93.0], [9.0, 9.0, 18.0]]} 

Bu dahili sütun x göre benzersiz değerler için her satır elde etmek için bir liste kavrayışa sahip, dizi oluşturmak için bir sözlük anlama kullanır.

Verileri alırken yüzen kullanıyorum, ancak verilerinizle eşleşmesi durumunda int'yi de belirtebilirsiniz.

0

Sen kod sadece birkaç satır ile, bunun için pandaları kullanabilirsiniz:

df = pd.read_csv(txt, sep=r"\s*") 
print df.sort(['x','y'], ascending=[True,True]) 
+0

saf python çözümü bu özel durumda benim için daha iyi olurdu – Scientized