gpt4 book ai didi

填充 numpy 数组的 Pythonic 方式

转载 作者:太空狗 更新时间:2023-10-30 00:37:11 27 4
gpt4 key购买 nike

我发现自己使用 csv 阅读器和 for 循环遍历每一行来解析大量数据文件(通常在 .csv 文件或类似文件中)。例如,数据通常是 float 表。

reader = csv.reader(open('somefile.csv'))
header = reader.next()

res_list = [list() for i in header]

for line in reader:
for i in range(len(line)):
res_list[i].append(float(line[i]))

result_dict = dict(zip(header,res_list)) #so we can refer by column title

这是一种很好的填充方式,所以我将每一列作为一个单独的列表,但是,我更希望项目列表(和嵌套列表)的默认数据容器是 numpy 数组,因为 99 次 100 得到的数字注入(inject)各种处理脚本/函数并拥有 numpy 列表的强大功能让我的生活更轻松。

numpy append(arr, item) 不会就地附加,因此需要为表中的每个点重新创建数组(这很慢且不必要)。我也可以遍历数据列列表,并在完成后将它们包装到一个数组中(这是我一直在做的),但有时什么时候 我已完成对文件的解析,无论如何以后可能都需要将内容附加到列表中。

我想知道是否有一些不那么繁琐的方法(使用过度使用的短语“pythonic”)以类似的方式处理数据表,或者动态填充数组(底层容器是一个列表)并且无需一直复制数组。

(另一方面:这有点烦人,通常人们使用列来组织数据,但如果读者合并了 read_column 参数,则 csv 会按行读取(是的,我知道它不会 super 高效),我想很多人会避免使用像上面这样的样板代码来解析 csv 数据文件。)

最佳答案

numpy.loadtxt:

X = numpy.loadtxt('somefile.csv', delimiter=',')

Documentation.


编辑:对于 numpy 数组列表,

X = [scipy.array(line.split(','), dtype='float') 
for line in open('somefile.csv', 'r')]

关于填充 numpy 数组的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356042/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com