查找最大值时,Python错误“无法使用灵活类型执行缩减”

时间:2014-02-16 10:43:32

标签: python numpy max

我正在尝试查找数字列表列表的最大值。

使用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,

2 个答案:

答案 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]]