2024-04-19 10:18:44 发布
网友
我正试图在x32机器上执行此代码
rows=100000 cols=1000 def create_matrix(rows,cols): data = (np.random.rand(rows,cols)*100).astype('uint8') return data
但是python.exe被压碎了,原因是什么?(我觉得不是x32内存限制?因为这样的阵列只需要~100 mb)。你知道吗
最终输出只需要大约100MB。但是,最终输出并不是您分配的唯一数组。你知道吗
np.random.rand(rows,cols)
这是一个由1亿个浮点64组成的数组,大约需要800MB。你知道吗
np.random.rand(rows,cols)*100
这是另一个由1亿个浮点64组成的阵列,也需要大约800MB。在计算时,此数组和前一个数组都必须保留在内存中,以获得大约1.6gb的峰值内存使用率,比您预期的高16倍。你知道吗
NumPy似乎没有提供直接生成随机uint8的方法。但是,您可以使用numpy.random.randint生成int32而不是float64s,并跳过临时分配,从而将此函数的峰值内存使用量减少到大约500 MB:
numpy.random.randint
return np.random.randint(0, 100, (rows, cols)).astype('uint8')
如果仍然太高,您可以生成块中的随机数,并将它们分片分配到结果数组中,从而减少需要立即保留在内存中的临时Int32数:
data = np.zeros([rows, cols], dtype='uint8') for chunk_start in xrange(0, rows, rows/10): data[chunk_start: chunk_start+rows/10] = ( np.random.randint(0, 100, (rows/10, cols))) return data
此版本的峰值内存使用量应为140 MB左右。你知道吗
最终输出只需要大约100MB。但是,最终输出并不是您分配的唯一数组。你知道吗
这是一个由1亿个浮点64组成的数组,大约需要800MB。你知道吗
这是另一个由1亿个浮点64组成的阵列,也需要大约800MB。在计算时,此数组和前一个数组都必须保留在内存中,以获得大约1.6gb的峰值内存使用率,比您预期的高16倍。你知道吗
NumPy似乎没有提供直接生成随机uint8的方法。但是,您可以使用
numpy.random.randint
生成int32而不是float64s,并跳过临时分配,从而将此函数的峰值内存使用量减少到大约500 MB:如果仍然太高,您可以生成块中的随机数,并将它们分片分配到结果数组中,从而减少需要立即保留在内存中的临时Int32数:
此版本的峰值内存使用量应为140 MB左右。你知道吗
相关问题 更多 >
编程相关推荐