【发布时间】:2018-08-02 17:39:14
【问题描述】:
也许有一种我想念的方法。长话短说,我需要一个大型文本文件的共享内存访问,只读。当然,使用字符串是必要的。所以我正在尝试这样做:
import numpy
from multiprocessing import Pool, RawArray
if __name__ == '__main__':
with open('test.txt', 'r') as fin:
raw = fin.readlines()
X_shape = (len(raw), 70) # 70 characters per line should be sufficient for my needs
X = RawArray('c', X_shape[0] * X_shape[1])
X_np = np.frombuffer(X).reshape(X_shape)
numpy.copyto(X_np, raw)
这不起作用,它在倒数第二行失败,输出如下:
ValueError: cannot reshape array of size 102242175 into shape (11684820,70)
作为参考,文件示例的长度为 11684820 行。并且 11684820 * 70 绝对不会是数组声称其大小的字符数。
显然我一定做错了什么,但这是我认为使用文本文件的文本文件输入多处理一些 CPU 绑定计算可行的唯一方法,这些文本文件输入在低端有几百兆字节,在高端大约 6GB结束。
是否有解决方法,或者可能是更正确的方法,以便我可以在共享内存中拥有大量字符串,我可以使用 python 代码处理这些字符串?谢谢。
【问题讨论】:
-
@DYZ:
readlines返回一个行列表,所以len(raw)应该是行数。 -
@user2357112 糟糕,我的错。
标签: python arrays numpy reshape array-broadcasting