为什么分配整个Blender数组比通过迭代分配这么快?

时间:2019-03-29 16:46:41

标签: python performance blender

我有两个函数均会产生随机噪声,但其中一个函数需要花费几秒钟才能完成,而另一个函数则需要数毫秒即可运行。在硬件级别上,差异来自何处?使用第二个功能时,指令是否并行执行?还是将内存中的整个阵列移动到存储图像的相应内存阵列中?     从随机导入随机

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__方法的实现所致。因为它必须访问像素,所以更改其值并重新绘制。

0 个答案:

没有答案