3 回答
TA贡献1864条经验 获得超2个赞
使用带有某种静态变量的简单随机数生成器可以提高性能:
import random
prev, r, g, b = None, 0, 0, 0
def id_to_random_color(number):
global prev, r, g, b
if number != prev:
r = random.random()
g = random.random()
b = random.random()
prev = number
return r, g, b, 1.0
更新:
正如 AndrewMcDowell 在他的评论中所述,如果输入在非连续情况下重复,则该函数可能返回不同的值。
这是一个可能的解决方法:
import random
memory = {}
def id_to_random_color(number, memory):
if not number in memory:
r = random.random()
g = random.random()
b = random.random()
memory[number] = (r, g, b, 1.0)
return memory[number]
进一步更新:
甚至可以使用相同的函数框架来计算哈希:
memory = {}
def id_to_random_color(number):
if not number in memory:
numByte = str.encode(number)
hashObj = hashlib.sha1(numByte).digest()
r, g, b = hashObj[-1] / 255.0, hashObj[-2] / 255.0, hashObj[-3] / 255.0
memory[number]= (r, g, b, 1.0)
return r, g, b, 1.0
else:
return memory[number]
尽管它的语法有点冗长,但该else语句提高了一点性能,避免了后续的内存写入和读取(如 Jake 在他的回答中所述)。
TA贡献2021条经验 获得超8个赞
我会使用字典来快速索引已经生成的种子。
import random
random_seeds = {}
def id_to_random_color(number):
if number in random_seeds.keys():
return random_seeds[number]
else:
color = [random.random(), random.random(), random.random(), 1.0]
random_seeds[number] = color
return color
添加回答
举报