【问题标题】:Averaging a list in Python, "Type Error: Cannot perform reduce with flexible type"在 Python 中平均一个列表,“类型错误:无法使用灵活类型执行 reduce”
【发布时间】:2015-09-12 12:32:06
【问题描述】:

下面的代码应该做如下:

  1. 使用 csv 文件中的特定数字列填充空列表。

  2. 然后计算列表值的平均值并绘制结果值。

问题:我不断收到错误“TypeError:无法使用灵活类型执行缩减”。我所知道的是,它必须通过压缩列表来做一些事情。但除此之外我不确定。任何帮助表示赞赏。

import csv 
import matplotlib.pyplot as plt 
import numpy as np 

channelData = []

channelSel = int(input("Select a channel to view "))

with open('PrivateData.csv', newline='') as f: 
    reader = csv.reader(f)
    for row in reader:
        channelData.append(row[channelSel])

averagemV = np.mean(channelData)

plt.plot(averagemV) 
plt.ylabel("Average mV")
plt.xlabel("Channel " + str(channelSel))
plt.show()

【问题讨论】:

  • channelData中每个元素的类型是什么?
  • @Kevin 整数。第 5 行代码你可以看到它是一个读取为整数的用户输入。
  • 在我看来错误来自 numpy 包,您可能需要添加该标签。
  • 但是您不是将channelSel 附加到channelData,而是附加row[channelSel],这可能不一定与channelSel 具有相同的类型。
  • @Kevin 我正在使用的值在技术上是浮点值。 row[channelSel] 真正的意思是在 csv 文件的每一行中取第 [channelSel] 个值

标签: python numpy


【解决方案1】:
with open('PrivateData.csv', newline='') as f: 
    reader = csv.reader(f)
    for row in reader:
        channelData.append(row[channelSel])

我怀疑这是在向channelData 添加看起来像浮点数的字符串,而不是实际的浮点数。尝试显式转换。

with open('PrivateData.csv', newline='') as f: 
    reader = csv.reader(f)
    for row in reader:
        channelData.append(float(row[channelSel]))

【讨论】:

  • 正是问题所在!谢谢。
【解决方案2】:

作为替代方案,numpy.genfromtxt 允许您将整个文件读入 2d 数组,并通过一些更改获得相同的结果。

data.txt:

1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16
with open('data.txt') as f:
    a = np.genfromtxt(f, delimiter=',')

>>> a
array([[  1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.],
       [  9.,  10.,  11.,  12.],
       [ 13.,  14.,  15.,  16.]])
>>> channelSel = 1
>>> mean = a.mean(axis = 0)
>>> mean
array([  7.,   8.,   9.,  10.])
>>> averagemV = mean[channelSel]
>>> averagemV
8.0
>>> 

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 2014-02-23
    • 2016-09-13
    • 1970-01-01
    • 2020-10-03
    • 2013-12-02
    • 2015-04-08
    • 1970-01-01
    相关资源
    最近更新 更多