cra*_*sic 5 python arrays numpy
我发现自己使用csv阅读器解析了大量数据文件(通常是.csv文件或类似文件),并使用for循环迭代每一行.例如,数据通常是浮点表.
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
Run Code Online (Sandbox Code Playgroud)
这是一个填充的好方法,所以我将每个列作为一个单独的列表,但是,我更希望项目列表(和嵌套列表)的默认数据容器是numpy数组,因为99次超出100个数字被泵入各种处理脚本/功能并具有numpy列表的强大功能使我的生活更轻松.
numpy append(arr, item)不会就地附加,因此需要为表中的每个点重新创建数组(这是缓慢且不必要的).我也可以遍历数据列列表并在完成之后将它们包装到一个数组中(这就是我一直在做的),但有时我不完全清楚我何时完成解析文件,可能需要稍后将内容附加到列表中.
我想知道是否有一些不那么重锅炉的方式(使用过度使用的短语"pythonic")以类似的方式处理数据表,或者动态地填充数组(底层容器是列表)而不复制数组一直都是.
(另一方面说明:一般人们使用列来组织数据,但csv如果读者合并了read_column参数(是的,我知道它不会超级高效),那就很烦人了,我想很多人都会避免像上面这样的锅炉板代码来解析一个csv数据文件.)
有numpy.loadtxt:
X = numpy.loadtxt('somefile.csv', delimiter=',')
Run Code Online (Sandbox Code Playgroud)
编辑:获取numpy数组列表,
X = [scipy.array(line.split(','), dtype='float')
for line in open('somefile.csv', 'r')]
Run Code Online (Sandbox Code Playgroud)