2016-07-20 12 views
0

Ich habe einige numerische Zahlen (ca. 550.000) und ich habe versucht, sie in einer CSV-Datei zu speichern. Meine Werte können nur 1 oder 2 sein, aber es wird gespeichert als:Speichern NumPy Array/Vektor zu CSV

['2.000000000000000000e+00'] 
['1.000000000000000000e+00'] 
['2.000000000000000000e+00'] 
['2.000000000000000000e+00'] 
... 

Mein Code ist:

import numpy as np 

def save_in_scv_format(My_Labels): 
    K = [] 
    for i in range(len(My_Labels)): 
     K.append(My_Labels[i]) 

    np.savetxt('My_labels.csv', K, delimiter = ',') 

My_labels ist ein Vektor-ganzzahlige Werte von 1 oder 2 mit einer Länge von 550.000 aufweist. Wie kann ich diese Werte als 1 oder 2 speichern?

+0

Was ist das Format, das Sie wollen? Die ganzzahlige Darstellung (z. B. "1", "2", "3"), getrennt durch Kommas? Wie zeigt sich 'print (','. Join (K))'? – jedwards

+1

Wenn Sie nicht sagen, welches Ausgabeformat Sie wollen, kann ich Ihnen nicht sagen, wie Sie es bekommen :-( –

+0

@jedwards @ Serge: Ich möchte einen Vektor von [1,2,2,2,1, ... haben .., 2,1,1] wenn ich die Datei lese und die Werte in eine Liste setze – user6352340

Antwort

0

Das erste, was darauf hin, unter der Annahme, My_Labels eine Liste ist, wie Sie vorschlagen, die angezeigte Abschnitt des Codes ist überflüssig:

def save_in_scv_format(My_Labels): 
    import numpy as np 
    K = []         # <-- 
    for i in range(len(My_Labels)):   # <-- 
      K.append(My_Labels[i])   # <-- 

    np.savetxt('My_labels.csv', K, delimiter = ',') 

, würden Sie genauso gut aus schriftlich:

def save_in_scv_format(My_Labels): 
    import numpy as np 

    np.savetxt('My_labels.csv', My_Labels, delimiter = ',') 

Aber ich glaube nicht, dass Sie brauchen, um zu tun, was es scheint, Sie tun möchten. Etwas wie:

def save_in_scv_format(My_Labels): 
    with open('My_labels.csv', 'w') as f: 
     f.write(','.join(My_Labels)) 

würde wahrscheinlich funktionieren, und besser.

Alternativ könnte man so etwas tun:

def save_in_scv_format(My_Labels): 
    with open('My_labels.csv', 'w') as f: 
     f.write(str(My_Labels)) 

, die die umschließenden eckigen Klammern bewahren würde, und fügen Sie Räume zwischen den ganzen Zahlen.

Es gibt auch die csv und pickle Module, in die Sie schauen können, für alternative Mittel zur Ausgabe Ihrer Liste in eine Datei.

n.b. Wenn ich falsch verstanden, und My_Labels ist, beispielsweise ein numpy Array, dann so etwas wie:

my_array = My_Labels.tolist() 

(docs) ist ein sauberer Weg, um eine Python-Liste zu erstellen.

+0

Denken Sie, dass das Speichern in einer Excel-Datei besser ist oder das Speichern in einer Textdatei? Zuvor habe ich versucht, es zu speichern in eine Textdatei, aber später konnte ich die Textdatei nicht öffnen. – user6352340

+0

Eine Textdatei ist viel einfacher zu erstellen und später viel einfacher in Python zu lesen. Wenn Sie eine richtige CSV-Datei erstellen (z. B. mit dem csv-Modul), können Sie diese auch in Excel importieren und die Ganzzahlen in Spalten aufteilen und die Kommas entfernen. – jedwards

+0

Der Eingang ist ein NumPy 'ndarray'; Die Verwendung von '.savetxt()' ist hier angebracht. – Will

0

Sie können die Formatierung numerischer Werte in der Ausgabe ändern. Von der manual:

fmt: str or sequence of strs, optional

A single format (%10.5f), a sequence of formats, or a multi-format string, 
    e.g. ‘Iteration %d – %10.5f’, in which case delimiter is ignored. 

So versuchen:

np.savetxt('My_labels.csv', K, delimiter = ',', fmt='%d') 

Allerdings gibt es andere Probleme mit diesem Code.

import numpy as np 

def save_in_csv_format(My_Labels): 
    np.savetxt('My_labels.csv', My_Labels, delimiter = ',', fmt='%d') 

Dies sollte genau das gleiche tun, und viel effizienter sein.