假设我们有以下代码
import numpy as np
D = []
for _ in range(200):
d = []
for _ in range(300):
d.append({'a': np.random.randn(64, 64, 3), 'b': np.random.randn(64, 64, 3)})
D.append(d)
np.save('data', D)
保存这些数据需要很长时间。代码有问题,还是因为字典对象?
- - - - - - - - - - - -更新 - - - - - - - - - - - - - ——
通过将字典放在外面,即使数据大小相同,它也快得多。所以看起来是字典减慢了这个过程。有什么潜在的原因吗?
IE
import numpy as np
D1 = []
D2 = []
for _ in range(200):
d1 = []
d2 = []
for _ in range(300):
d1.append(np.random.randn(64, 64, 3))
d2.append(np.random.randn(64, 64, 3))
D1.append(d1)
D2.append(d2)
np.save('d1', D1)
np.save('d2', D2)
这是执行类似操作的代码,但以高效的矢量化方式执行,没有慢速for
循环:
np.savez('data',
a=np.random.randn(200, 300, 64, 64, 3),
b=np.random.randn(200, 300, 64, 64, 3))
输出格式略有不同——它更紧凑,读回效率更高。
请注意,这几乎是 12 GB 的数据,因此生成随机数并将它们写入磁盘当然需要一段时间。如果你的真实数据的熵比随机数低,你可以考虑使用savez_compressed()
启用压缩和节省一些磁盘空间(以保存和加载时的CPU时间为代价)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句