是否有一种更快的方法可以使用这里看到的相同算法(使用相同输入参数的pnoise3,尤其是i/scale j/scale)填充2d numpy数组?self.world是np数组,像这样遍历它相当大(20481024)
for i in range(self.height):
for j in range(self.width):
self.world[i][j] = noise.pnoise3(i/self.noise['scale'],
j/self.noise['scale'],
SEED,
octaves = self.noise['octaves'],
persistence = self.noise['persistence'],
lacunarity = self.noise['lacunarity'],
repeatx= self.width,
repeaty= self.height,
base= 0)
在学习了布尔索引之后,我在程序的其他地方摆脱了这个嵌套for循环,并惊讶于它的效率有多高。以上有改进的余地吗
我想做一些类似self.world[self.world is not None] = noise.pnoise3(arg, arg, etc...)
的事情,但这不能适应递增的I和j值。将其设置为函数输出是否意味着每个值都是相同的?我还考虑过制作一个单独的数组,然后将它们组合起来,但我仍然不知道如何在这种情况下重现递增的I和j值
另外,顺便说一句,我将used self.world[self.world is not None]
作为布尔索引的一个示例,该布尔索引将为所有内容返回true,但我认为这不是实现我所希望的最好方法。有没有我错过的明显的替代方案
如果pnoise是perlin噪声,则存在numpy矢量化实现。 这里是one
就目前情况而言,我认为你不能做得更快。当Numpy可以在C中执行内部循环时,它的速度很快。对于内置的Numpy函数,如np.sin,就是这样
这里有一个向量操作,其中的操作是python函数
但是,可以重新实现噪波函数,以便在内部使用numpy矢量化函数
相关问题 更多 >
编程相关推荐