为什么这个值是十倍的 numpy 数组随机生成的时间呈指数增长?
Why does this numpy array with ten times the values take exponentially larger amounts of time to randomly generate?
我初始化了三个 numpy 数组,因为我需要将一些随机数据输入算法。
我的第二个数组有大约一百倍的值,并且花费大约一百倍的时间。
由于某种原因,第三个花费的时间几乎是第二个的 1800 倍。
nparray = np.random.randint(0, 256, (1024, 800, 3)) #0.03125357627868652
nparray = np.random.randint(0, 256, (100, 1024, 800, 3) #2.9687747955322266
nparray = np.random.randint(0, 256, (10, 100, 1024, 800, 3)) #5339.585757017136
假设 numpy 对这些数组使用 dtype('int64')
,即每个元素 8 个字节:
- 第一个数组是 2457600 个元素(~20 兆字节)
- 第二个数组是 245760000 个元素(~2 GB)
- 第三个数组是 2457600000 个元素(~20 GB)
如果您有一台相当普通的机器,第一种和第二种情况很可能完全在 RAM 中工作。第三个阵列很大,几乎肯定需要将数据交换到磁盘,这要慢得多。
您可以使用 sys.getsizeof(obj)
检查 Python 中对象的大小。使用 free
(Linux) 或 vm_stat
(macOS) 检查可用内存。
我初始化了三个 numpy 数组,因为我需要将一些随机数据输入算法。
我的第二个数组有大约一百倍的值,并且花费大约一百倍的时间。
由于某种原因,第三个花费的时间几乎是第二个的 1800 倍。
nparray = np.random.randint(0, 256, (1024, 800, 3)) #0.03125357627868652
nparray = np.random.randint(0, 256, (100, 1024, 800, 3) #2.9687747955322266
nparray = np.random.randint(0, 256, (10, 100, 1024, 800, 3)) #5339.585757017136
假设 numpy 对这些数组使用 dtype('int64')
,即每个元素 8 个字节:
- 第一个数组是 2457600 个元素(~20 兆字节)
- 第二个数组是 245760000 个元素(~2 GB)
- 第三个数组是 2457600000 个元素(~20 GB)
如果您有一台相当普通的机器,第一种和第二种情况很可能完全在 RAM 中工作。第三个阵列很大,几乎肯定需要将数据交换到磁盘,这要慢得多。
您可以使用 sys.getsizeof(obj)
检查 Python 中对象的大小。使用 free
(Linux) 或 vm_stat
(macOS) 检查可用内存。