在Python

时间:2017-04-13 16:11:12

标签: python numpy

我有一个有效的矩阵保存为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只是用正整数值填充,用逗号分隔。

1 个答案:

答案 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,则会使用科学记数法编写这些数字。)