我有两个函数均会产生随机噪声,但其中一个函数需要花费几秒钟才能完成,而另一个函数则需要数毫秒即可运行。在硬件级别上,差异来自何处?使用第二个功能时,指令是否并行执行?还是将内存中的整个阵列移动到存储图像的相应内存阵列中? 从随机导入随机
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
这是我的混合文件的link。我不知道这是否安全。我可以在BlenderStack上发布类似的问题,并仅在1.5小时内将文件上传到那里。从here下载,解压缩并启动Blender(耗时数分钟)。打开文件,在脚本窗口中,您可以按Alt + P来运行它。取消注释功能位于列表的末尾。慢速功能将简单地冻结应用程序。
我认为@cephner说的对,这是由于__setitem__
方法的实现所致。因为它必须访问像素,所以更改其值并重新绘制。