我正在尝试查找数字列表列表的最大值。
使用Python 2.7 IDLE,我尝试了这个:
import numpy
vectors = [[1, 2, 3], [4,5,6]]
numpyFiles = numpy.array(vectors)
maxRawFreq = numpyFiles.max()
有效,maxRawFreq = 6
我尝试使用非常相似的代码,使用更大的列表,并使用Pydev(Eclipse),但是我收到以下错误:
cannot perform reduce with flexible type
这是什么意思? (关于这个错误的其他SO问题给出了太具体的解决方案......)。
我的代码:
import numpy
with open(inputFile) as f:
vectors = f.readlines()
vectorLength=len(vectors[0])#number of columns (word vector length)
numpyFiles = numpy.array(vectors)
#both these line gave me the same error:
#maxRawFreq = numpyFiles.max()
maxRawFreq = numpy.max(numpyFiles)
我的inputFile
包含数字,如下:
-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-1, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
+1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
答案 0 :(得分:2)
问题在于:
with open(inputFile) as f:
vectors = f.readlines()
如果您的文件如下所示:
a, b, c, d
1, 1, 3, 4
2, 3, 5, 6
...
你的矢量看起来像这样:
['a, b, c, d\n', '1, 1, 3, 4\n', '2, 3, 5, 6\n', ...]
然后你需要将这些字符串转换为数值。
尝试以正确的方式阅读csv(或您的输入文件是什么)
答案 1 :(得分:1)
In [81]: data=numpy.genfromtxt(inputFile, delimiter=',')[:, :-1]
In [82]: data
Out[82]:
array([[-1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[-1., 0., 0., 3., 0., 0., 1., 0., 0., 0., 0., 0., 1.,
0., 0., 0., 0., 0., 0., 0., 0., 4., 0., 0.],
[ 1., 0., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 6.]])
如果你想自己解析它:
In [89]: with open(inputFile) as f:
...: d=[map(float, l.strip(',\n').split(',')) for l in f]
...: print d
...:
[[-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [-1.0, 0.0, 0.0, 3.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0], [1.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.0]]