假设我有一个元组列表,格式为:
data = [(1,2), (1,2), ..., (1,2)]
和一个接受元组的方法data_to_bytes
对它做一些事情并返回字节。现在我想对data
中的每个元素调用这个方法,并将输出保存到文件中。这是我已经有的:
def create_data_file(data_file, data):
with data_file.open('wb') as _file:
for i in data:
_file.write(data_to_bytes(i))
return data_file
但是这太慢了,我想改进它。也许可以去掉里面的循环。我正在考虑以某种方式使用numpy,也许在整个数组上调用data_to_bytes()
而不是每个元素。这可能吗?
只有当你可以替换你的" data_to_bytes " "通过numpy函数在整个数组上运行。Numpy不向量化任意函数
如果你认为这是不可能的,其他提高性能的方法可能是:
- 缓存"data_to_bytes"或
- 提高"data_to_bytes"的性能本身
看看numpy.apply_along_axis。它接受输入数组,并沿着轴应用给定函数,返回一个包含计算数据的新数组。
试试下面的代码:
data = [(1, 2), (1, 2), (1, 2)]
def create_data_file(data_file, data):
with open(data_file, 'wb') as _file:
for i in data:
_file.write(bytearray(i))
print(type(bytearray(i)))
return data_file
create_data_file('test.txt', data)