
[英]Why items method for dictionary is so much faster than a straightforward iteration?
[英]Why is assigning whole Blender array so much faster than assigning through iteration?
我有两个函数都产生随机噪声,但其中一个需要几秒钟完成,另一个运行在几毫秒。 在硬件方面,差异来自哪里? 当我使用第二个函数时,是否并行执行指令? 或是内存中的整个数组移动到存储图像的相应内存数组? 从随机导入随机
def slow_random():
for i in range(len(bpy.data.images['img'].pixels)):# < pixels are just a list of pixesl color values, where 0 <= value <= 1
bpy.data.images['img'].pixels[i] = random()
def quick_random():
rand = [random() for i in range(len(bpy.data.images['img'].pixels))]
bpy.data.images['img'].pixels[0:] = rand
这是我的混合文件的链接 。 我不知道它是否安全。 我可以在BlenderStack上发布一个类似的问题,并在1.5小时内上传一个文件。 从这里下载,解压缩和启动搅拌机(需要几分钟)。 打开文件,在脚本窗口中,您可以按Alt + P运行它。 取消注释列表末尾的功能。 慢功能将简单地冻结应用程序。
我认为,@ emphner说这是由于__setitem__
方法的实现。 因为它必须访问像素,更改其值并重绘它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.