【问题标题】:converting a string of floats into float array in python在python中将一串浮点数转换为浮点数组
【发布时间】:2014-03-07 06:17:34
【问题描述】:

我正在尝试读取一个 csv 文件并创建一个包含数据行的数组。这是我的代码:

import csv
def main():
    a = range(4)
    x = 0
    with open('test.csv', 'rb') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
        for row in spamreader:
            a[x] = [float(x) for x in row.split()]
            x += 1
    print a 

输出:

[['13,4.2,2.4,5,6.4'], ['14,3.2,3.4,5.6,7.2'], ['15,8.5,3.7,8.5,0.75'], ['16,5.4,8.3,3.5,5.4']]

如何将这些数组从 1 个字符串转换为浮点数组?

【问题讨论】:

标签: python arrays csv


【解决方案1】:

我可以使用 eval:

 >>> ls = [['13,4.2,2.4,5,6.4'], ['14,3.2,3.4,5.6,7.2'], ['15,8.5,3.7,8.5,0.75'],     ['16,5.4,8.3,3.5,5.4']]
 >>> [ eval(x[0]) for x in ls ]
 [(13, 4.2, 2.4, 5, 6.4), (14, 3.2, 3.4, 5.6, 7.2), (15, 8.5, 3.7, 8.5, 0.75), (16, 5.4,   8.3, 3.5, 5.4)]
 >>>

【讨论】:

  • eval 比 map 或 list comprehension 慢
  • 速度慢的原因有哪些?
  • 您可以自行计时,或查看stackoverflow.com/questions/1832940/…
  • 我看不出那个帖子有什么慢的理由吗?你能解释一下吗?
  • 使用 ctrl+F 搜索,你会看到 它会导致小段代码的动态编译相对较慢 ;)
【解决方案2】:

直接回答你的问题:

x = [['13,4.2,2.4,5,6.4'], ['14,3.2,3.4,5.6,7.2'], ['15,8.5,3.7,8.5,0.75'], ['16,5.4,8.3,3.5,5.4']]
x = [float(q) for a in x for q in a[0].split(',')]

但是,最好在读取时通过指定delimiter=',' 将其拆分。

spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
a = [row for row in spamreader]
a = [x for sublist in a for x in sublist]

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 2014-09-25
    • 2022-01-24
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多