浮点32数据和浮点64数据使用相同的内存?

2024-10-05 13:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我曾尝试使用tracemalloc跟踪编码的内存使用情况,发现对于浮点32数据和浮点64数据,它们的内存使用峰值相同。为什么?

输出屏幕截图:

Photo - Result

浮动64:

import tracemalloc
import numpy as np
tracemalloc.start()
arr = np.zeros((100000000,), dtype=np.float64)
for i in range(100000000):
    arr[i] = i
current, peak = tracemalloc.get_traced_memory()
#current memory is the memory the code is currently using and 
#peak memory is the maximum space the program used while executing.
tracemalloc.stop()
print(f"Current memory usage is {current / 10**6}MB; Peak was {peak / 10**6}MB")

输出:

Current memory usage is 800.14981MB; Peak was 800.160145MB

第32条:

import tracemalloc
import numpy as np
tracemalloc.start()
arr = np.zeros((100000000,), dtype=np.float32)
arr = arr.astype(np.float32)
for i in range(100000000):
    arr[i] = i
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"Current memory usage is {current / 10**6}MB; Peak was {peak / 10**6}MB")

输出:

Current memory usage is 400.149626MB; Peak was 800.149468MB

Tags: the内存importisnpusagembcurrent
1条回答
网友
1楼 · 发布于 2024-10-05 13:15:31

您可以看到,这两个代码段并不相同。在第二个代码段中有一个附加语句

arr = arr.astype(np.float32)

该语句(即使arr已经具有类型np.float32):

  • 复制阵列(占用的内存量与旧阵列相同)
  • 然后将新数组分配给arr
  • 然后丢弃旧数组

因此,峰值内存加倍

相关问题 更多 >

    热门问题