我有一个有效的矩阵保存为CSV文件。我们称这个矩阵为'X'。
我需要做的是获取csv文件,将其作为矩阵读取,找到它的转置然后将两者相乘。目前我有以下代码:
import numpy
import csv
reader = csv.reader(open("votes.csv","rb"), delimiter=",")
text = list(reader)
result = numpy.matrix(text).astype(int)
print result
这应该只是向我展示csv文件作为整数矩阵,但即使这样也会引发以下错误:
result = numpy.matrix(text).astype(int)
ValueError: invalid literal for int() with base 10: ''
有人可以帮我吗?
如果它是任何值,则csv只是用正整数值填充,用逗号分隔。
答案 0 :(得分:2)
您的CSV包含一个空单元格,无法将其解析为int
。
您可以let numpy to read the CSV directly代替使用csv.reader
,它也可以为您处理这些空单元格或无效单元格而不会引发错误:
X = numpy.genfromtxt('1.csv', dtype=int, delimiter=',', filling_values=0)
# compute the matrix multiplication.
result = X.dot(X.T)
(此处我使用filling_values=0
将所有空单元格替换为0
。)
使用numpy.savetxt
将数组保存为CSV格式:
numpy.savetxt('2.csv', result, fmt='%d', delimiter=',')
(如果您不提供fmt
,则会使用科学记数法编写这些数字。)