gpt4 book ai didi

python - 有效地将字符串列表转换为 float32

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:41 25 4
gpt4 key购买 nike

我有一个 3000x300 矩阵文件( float )。当我读取并转换为 float 时,我得到的是 float64,这是 python 中的默认设置。我试过 numpy 和 map() 将其转换为 float32() 但它们看起来都很低效。

我的代码:

x = open(readFrom, 'r').readlines()
y = [[float(i) for i in s.split()] for s in x]

所用时间:0:00:00.996000

numpy 实现:

x = open(readFrom, 'r').readlines()
y = [[np.float32(i) for i in s.split()] for s in x]

所用时间:0:00:06.093000

map ()

x = open(readFrom, 'r').readlines()
y = [map(np.float32, s.split()) for s in x]

所用时间:0:00:05.474000

如何高效地转换为 float32?

谢谢。

更新:

numpy.loadtxt()numpy.genfromtxt() 无法处理大文件(出现内存错误)。我已经发布了一个与此相关的问题,我在此处介绍的方法适用于巨大的矩阵文件 (50,000x5000)。 here is the question

最佳答案

如果内存有问题,并且您提前知道字段的大小,您可能一开始就不想读取整个文件。这样的事情可能更合适:

#allocate memory (np.empty would work too and be marginally faster, 
# but probably not worth mentioning).
a=np.zeros((3000,300),dtype=np.float32)
with open(filename) as f:
for i,line in enumerate(f):
a[i,:]=map(np.float32,line.split())

在我的机器上进行了几次快速(和令人惊讶的)测试,看来 map 甚至可能不是必需的:

a=np.zeros((3000,300),dtype=np.float32)  
with open(filename) as f:
for i,line in enumerate(f):
a[i,:]=line.split()

这可能不是最快的,但肯定是内存效率最高的方式。

一些测试:

import numpy as np

def func1(): #No map -- And pretty speedy :-).
a=np.zeros((3000,300),dtype=np.float32)
with open('junk.txt') as f:
for i,line in enumerate(f):
a[i,:]=line.split()

def func2():
a=np.zeros((3000,300),dtype=np.float32)
with open('junk.txt') as f:
for i,line in enumerate(f):
a[i,:]=map(np.float32,line.split())

def func3():
a=np.zeros((3000,300),dtype=np.float32)
with open('junk.txt') as f:
for i,line in enumerate(f):
a[i,:]=map(float,line.split())

import timeit

print timeit.timeit('func1()',setup='from __main__ import func1',number=3) #1.36s
print timeit.timeit('func2()',setup='from __main__ import func2',number=3) #11.53s
print timeit.timeit('func3()',setup='from __main__ import func3',number=3) #1.72s

关于python - 有效地将字符串列表转换为 float32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527964/

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