3 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
使用帶有某種靜態(tài)變量的簡單隨機(jī)數(shù)生成器可以提高性能:
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 在他的評(píng)論中所述,如果輸入在非連續(xù)情況下重復(fù),則該函數(shù)可能返回不同的值。
這是一個(gè)可能的解決方法:
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]
進(jìn)一步更新:
甚至可以使用相同的函數(shù)框架來計(jì)算哈希:
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]
盡管它的語法有點(diǎn)冗長,但該else語句提高了一點(diǎn)性能,避免了后續(xù)的內(nèi)存寫入和讀?。ㄈ?Jake 在他的回答中所述)。

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
我會(huì)使用字典來快速索引已經(jīng)生成的種子。
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
添加回答
舉報(bào)