2017-04-13 3 views
0

Ich habe, was effektiv eine Matrix als CSV-Datei gespeichert ist. Nennen wir diese Matrix 'X'.Transponieren und Multiplizieren von Matrizen in Python

Was ich tun muss, ist die CSV-Datei nehmen, lesen Sie es als eine Matrix, finden Sie es transponieren und dann die beiden zusammen multiplizieren. Im Moment habe ich den folgenden Code:

import numpy 
import csv 
reader = csv.reader(open("votes.csv","rb"), delimiter=",") 
text = list(reader) 
result = numpy.matrix(text).astype(int) 
print result 

die nur sollte mir zeigen, die CSV-Datei als eine Matrix von ganzen Zahlen aber auch die wirft folgende Fehlermeldung:

result = numpy.matrix(text).astype(int) 
ValueError: invalid literal for int() with base 10: '' 

Könnte jemand helfen ich damit?

Wenn es irgendeinen Wert hat, wird der CSV einfach mit positiven und negativen Ganzzahlwerten gefüllt, die durch Kommata getrennt sind.

Antwort

2

Ihre CSV enthält eine leere Zelle, die nicht in eine int geparst werden kann.

Statt csv.reader verwenden, können Sie let numpy to read the CSV directly, die auch diese leer oder ungültig Zellen für Sie ohne Erhöhung Fehler behandelt: (. Hier habe ich filling_values=0 alle leeren Zellen mit 0 zu ersetzen)

X = numpy.genfromtxt('1.csv', dtype=int, delimiter=',', filling_values=0) 

# compute the matrix multiplication. 
result = X.dot(X.T) 

Verwenden numpy.savetxt das Array in eine CSV speichern:

numpy.savetxt('2.csv', result, fmt='%d', delimiter=',') 

(Wenn Sie die fmt nicht zur Verfügung stellen, werden die Zahlen mit wissenschaftlicher Notation geschrieben.)

+0

Das ist ausgezeichnet danke. Ich lief numpy.shape (Ergebnis) und es gab (150L, ​​150L) was genau das war, was ich erwartete. Gibt es eine Möglichkeit, die Matrix zurück in eine CSV zu verwandeln? – modestmotion

+0

@modestmotion Siehe Aktualisierung. – kennytm

+0

Das ist perfekt! Vielen Dank, du bist ein Star. Ich werde dies als beantwortet markieren. – modestmotion