第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Python - 獲取隨機(jī)顏色,盡可能快地給出種子數(shù)

Python - 獲取隨機(jī)顏色,盡可能快地給出種子數(shù)

富國滬深 2021-06-30 13:01:09
我需要找到一個(gè)隨機(jī)顏色,給定一個(gè)特定的種子號(hào) - 快。兩次給出相同的 ID,應(yīng)該返回相同的顏色。我這樣做了:def id_to_random_color(number):    random_bytes = hashlib.sha1(bytes(number)).digest()    return [int(random_bytes[-1]) / 255, int(random_bytes[-2]) / 255, int(random_bytes[-3]) / 255, 1.0]問題是多次計(jì)算數(shù)字的 sha1 總的來說非常慢。(我使用這個(gè)功能大約 10 萬次)編輯:我使用散列函數(shù)的原因是我希望對(duì)于接近的數(shù)字使用不同的顏色例如id_to_random_color(7)應(yīng)該與id_to_random_color(9)
查看完整描述

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 在他的回答中所述)。


查看完整回答
反對(duì) 回復(fù) 2021-07-13
?
寶慕林4294392

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


查看完整回答
反對(duì) 回復(fù) 2021-07-13
  • 3 回答
  • 0 關(guān)注
  • 243 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)