Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和NumPy生成大型随机文本文件_Python_String_File_Numpy_Random - Fatal编程技术网

使用python和NumPy生成大型随机文本文件

使用python和NumPy生成大型随机文本文件,python,string,file,numpy,random,Python,String,File,Numpy,Random,对于测试数据,我需要快速创建随机文本的大文件。我有一个解决方案,如下所示: import random import string n = 1024 ** 2 # 1 Mb of text chars = ''.join([random.choice(string.letters) for i in range(n)]) with open('textfile.txt', 'w+') as f: f.write(chars) 我的问题是,这需要653毫秒来执行,对我的使用来说太多

对于测试数据,我需要快速创建随机文本的大文件。我有一个解决方案,如下所示:

import random
import string

n = 1024 ** 2  # 1 Mb of text
chars = ''.join([random.choice(string.letters) for i in range(n)])

with open('textfile.txt', 'w+') as f:
    f.write(chars)
我的问题是,这需要653毫秒来执行,对我的使用来说太多了


有没有更快的方法可以快速生成包含随机文本的文本文件?

创建一个字母数组:

In [662]: letters = np.array(list(chr(ord('a') + i) for i in range(26))); letters
Out[662]: 
array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
       'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'],
      dtype='<U1')
时间: 或者

In [705]: %timeit np.random.choice(np.fromstring(letters, dtype='<U1'), n)
100 loops, best of 3: 14.1 ms per loop

In[705]:%timeit np.random.choice(np.fromstring(letters,dtype=)我很好奇,这里的用例是什么?您可以将random.choice(string.letters)中的I放在范围(n)内进入生成器并使用yield使其更快使用一些东西,如faker库python@JonasAdler我用numpy计时了一种方法,将速度降低到370ms。这是否仍然太慢?我可以稍微修改一下,并获得一个数量级的更好性能:
np.random.choice(np.fromstring(string.letters,dtype='S1'),n)
,总时间
17 ms
。你能更新这个答案吗,我会接受这个答案吗?@JonasAdler,它会给你一个字符列表,对吗?你会想把它们连接在一起。似乎
f.write
接受字符数组。结果看起来不错,基本上是即时的。@JonasAdler,如果你不介意的话,我会让你快一点事实上它们不是二进制字符串。@JonasAdler很乐意帮忙:)
In [664]: n = 1024 ** 2

In [701]: %timeit np.random.choice(letters, n)
100 loops, best of 3: 15.1 ms per loop
In [705]: %timeit np.random.choice(np.fromstring(letters, dtype='<U1'), n)
100 loops, best of 3: 14.1 ms per loop