pythonrandom種子
『壹』 python隨機種子輸出幾個整數
python隨機種子輸出10個整數。python隨機種子用於指定隨機數生成時所用演算法開始的整數值蠢穗稿,若使用相同的seed值,則每次生成的隨即數都相同,若不設置這個值,則系統根據時間來選擇這族明個值,此時每次帶孝生成的隨機數因時間差異而不同。
『貳』 python中在指定概率分布的情況下,為什麼設定隨機數種子仍影響random.choice的結果
運行結果是符合p分布的
for循環改成1000次試試,3、2、0出現的次數分別是587、299、114次,符合0.6、0.3、0.1
importnumpyasnp
i3=i2=i0=0
forseedinnp.arange(1000):
np.random.seed(seed)
n=np.random.choice(5,p=[0.1,0,0.3,0.6,0])
i3+=n==3
i2+=n==2
i0+=n==0
print(i3,i2,i0)
隨機種子確實影響結果
但不是影響結果的分布情況,而是影響計算機產生隨機數的情況,你運行1000次結果一定和我一樣,就是因為我們的隨機種子給的都是一樣的。
隨機種子
我們知道計算機無法產生真正的隨機數,是通過演算法產生的偽隨機數,但具有類似於真正隨機數的統計特徵,如均勻性、獨立性等。
隨機種子的作用在於給定這個產生隨機數演算法的初值。給定後會影響以後產生隨機數的具體值是多少,但不影響這些隨機數的分布情況。
上面那個程序,如果我們不指定隨機種子,那麼結果符合p分布,但你與我結果不同,同一段代碼多次運行結果也不同。如果指定隨機種子,那麼結果依然符合p分布,但全天下人運行結果都相同。
如果已知兩粒種子(隨機種子)和兩個生長環境(產生隨機數演算法)都完完全全一樣,那麼可以得出長出的兩個作物完全一樣(忽略量子力學影響)。但這兩粒種子無論相同與否都不會影響長出的作物到底是玉米還是高粱(不影響結果分布情況)。
『叄』 【Python 】性能優化系列:隨機數
最近在做的項目重點部分與大量生成隨機數有關,維度高達[1700000,10000],需要生成 10 x 30 次左右,這里遇到內存和速度的雙重瓶頸,特地研究了一下如何優化隨機數。
優化時間測試所需的分析工具在另一篇博客《性能優化系列一:分析工具》中提到。
原生的python中也有隨機模塊生成 random.randint 和 random.random 等,但是速度非常慢,numpy 速度可以大幅提升。一般都採用numpy生成隨機數。
比較常用的就是以上幾種。在需要生成大量隨機數的情況下,或生成偽隨機數的情況下,python 3.7 常用 RandomState 。
直接生成大規模非稀疏矩陣如下,經常遇到 MemoryError 的錯誤,大概是同時生成多個float64精度的大規模隨機矩陣伺服器內存不夠,而random state 似乎也沒提供調整類型的attr,
這時最好使用即使生成即使銷毀,僅保留種子作為索引,同樣,多個CPU之間共享大規模矩陣涉及到共享內存或數據傳輸同步較慢的問題,最好也共享seed而不是直接共享矩陣。
ps. 這里注意一般我們設置time.time()為種子時,對於並發性程序是無效的,不要在並發程序中同時定義,建議生成一個seed list 列表再從中取。
這里可以對大規模矩陣進行分片以進行後續的np 乘法,再切片賦值,以時間換內存。這種情況的麻煩在於如果設定隨機數種衡基子會導致每個分片的隨機數相同。可以利用一個最初seed(爺爺種子)randint生成 一組切片組數的seed(父親種子),再每次從中取不同的隨機數。
在上述切片方法嘗試之後,可以解決內存問題。但是時間非常慢,特別是採取s = 1時在standard normal 上調用170萬次的時間長達3000s,line search一下搜索了大約100000為切片值仍然太慢。在文檔中發現了 BitGenerator 和 Generator ,大約早棗可以提速到原來的 1/3。
除了Numpy和基本模塊之外,AES CTR 加密演算法生成隨機數也很快,但咐睜謹是並不能有比較方便的方式控制每次生成的一樣。參見以下reference。
tensorflow 和 pytorch 也都有大規模生成隨機tensor的方式。性能待考。
1. 超快生成隨機數的方式CSDN博客
2. tensorflow 生成隨機tensor
『肆』 在Python代碼中random.seed(1)什麼意思
seed( ) 用於指定隨機數生成時所用演算法開始的整數值。
如果使用相同的seed( )值,則每次生成的隨即數都相同,如果不設置這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數因時間差異而不同,設置的seed()值僅一次有效。
在其他語言中,要在兩個變數間交換值而不是用第三個變數,要麼使用算術運算符,要麼使用位異或(Bitwise XOR)。
(4)pythonrandom種子擴展閱讀:
注意事項:
在Python里,一個表達式中的名字在它被賦值之前是沒法使用的。這是有意而為的:這樣能避免一些輸入失誤,同時也能避免默認究竟應該是什麼類型的問題(0,None,[],?)。記住把計數器初始化為0,列表初始化為[],以此類推。
確保把頂層的,未嵌套的代碼放在最左邊第一列開始。這包括在模塊文件中未嵌套的代碼,以及在交互提示符中未嵌套的代碼。Python使用縮進的辦法來區分嵌套的代碼段,因此在代碼左邊的空格意味著嵌套的代碼塊。除了縮進以外,空格通常是被忽略掉的。
『伍』 python中random什麼意思
Random意思是返回一個0~num-1之間的隨機數。random(num)是在stdlib.h中的一個宏定義。num和函數返回值都是整型數。
如需要在一個random()序列上生成真正意義的隨機數,在執行其子序列時使用randomSeed()函數預設一個絕對的隨機輸入,例如在一個斷開引腳上的analogRead()函數的返回值。
Random的作用
Random使用之前需要使用Randomize語句進行隨機數種子的初始化。RANDOM產生的是偽隨機數或者說是用一種復雜的方法計算得到的序列值,因此每次運算時需要一個不同的種子值。種子值不同,得到的序列值也不同。因此也就是真正的隨機數了。
RANDOM產生的是偽隨機數或者說是用一種復雜的方法計算得到的序列值,因此每次運算時需要一個不同的種子值。種子值不同,得到的序列值也不同。因此也就是真正的隨機數了。這也正是RANDOMIZE隨機初始化的作用。 VB里用 NEW RANDOM()來表示初始化。
『陸』 詳解隨機數的生成
隨機數參與的應用場景大家一定不會陌生,比如密碼加鹽時會在原密碼上關聯一串隨機數,蒙特卡洛絕喊雀演算法會通過隨機數采樣等等。Python內置的random模塊提供了生成隨機數的方法,使用這些方法時需要導入random模塊。
下面介紹下Python內置的random模塊的幾種生並早成隨機數滲租的方法。
1、random.random()隨機生成 0 到 1 之間的浮點數[0.0, 1.0)。注意的是返回的隨機數可能會是 0 但不可能為 1,即左閉右開的區間。
2、random.randint(a , b)隨機生成 a 與 b 之間的整數[a, b],a<=n<=b,隨機整數不包含 b 時[a, b)可以使用 random.randrange() 方法。
3、random.randrange(start,stop,step)按步長step隨機在上下限范圍內取一個隨機數,start<=n<stop。
4、random.uniform(a, b)隨機生成 a 與 b 之間的浮點數[a, b],a<=n<=b。
5、random.choice()從列表中隨機取出一個元素,比如列表、元祖、字元串等。注意的是,該方法需要參數非空,否則會拋出 IndexError 的錯誤。
6、random.shuffle(items) 把列表 items 中的元素隨機打亂。注意的是,如果不想修改原來的列表,可以使用 模塊先拷貝一份原來的列表。
7、random.sample(items, n)從列表 items 中隨機取出 n 個元素。
Python 的random模塊產生的隨機數其實是偽隨機數,依賴於特殊演算法和指定不確定因素(種子seed)來實現。如randint方法生成一定范圍內的隨機數,會先指定一個特定的seed,將seed通過特定的隨機數產生演算法,得到一定范圍內隨機分布的隨機數。因此對於同一個seed值的輸入產生的隨機數會相同,省略參數則意味著使用當前系統時間秒數作為種子值,達到每次運行產生的隨機數都不一樣。
numpy庫也提供了random模塊,用於生成多維度數組形式的隨機數。使用時需要導入numpy庫。
下面介紹下numpy庫的random模塊的幾種生成隨機數的方法。
1、numpy.random.rand(d0,d1,…,dn)
2、numpy.random.randn(d0,d1,…,dn)
3、numpy.random.randint(low, high=None, size=None, dtype=』l』)
4、numpy.random.seed()
『柒』 Python 數據處理(二十四)—— 索引和選擇
如果你想獲取 'A' 列的第 0 和第 2 個元素,你可以這樣做:
這也可以用 .iloc 獲取,通過使用位置索引來選擇內容
可以使用 .get_indexer 獲取多個索引:
警告 :
對於包含一個或多個缺失標簽的列表,使用 .loc 或 [] 將不再重新索引,而是使用 .reindex
在以前的版本中,只要索引列表中存在至少一個有效標簽,就可以使用 .loc[list-of-labels]
但是現在,只要索引列表中存在缺失的標簽將引發 KeyError 。推薦的替代方法是使用 .reindex() 。
例如
索引列表的標簽都存在
先前的版本
但是,現在
索引標簽列表中包含不存在的標簽,使用 reindex
另外,如果你只想選擇有效的鍵,可以使用下面的方法,同時保留了數據的 dtype
對於 .reindex() ,如果有重復的索引將會引發異常
通常,您可以將所需的標簽與當前軸做交集,然後重新索引
但是,如果你的索引結果包含重復標簽,還是會引發異常
使用 sample() 方法可以從 Series 或 DataFrame 中隨機選擇行或列。
該方法默認會對行進行采樣,並接受一個特定的行數、列數,或數據子集。
默認情況下, sample 每行最多返回一次,但也可以使用 replace 參數進行替換采樣
默認情況下,每一行被選中的概率相等,但是如果你想讓每一行有不同的概率,你可以為 sample 函數的 weights 參數設置抽樣權值
這些權重可以是一個列表、一個 NumPy 數組或一個 Series ,但它們的長度必須與你要抽樣的對象相同。
缺失的值將被視為權重為零,並且不允許使用 inf 值。如果權重之和不等於 1 ,則將所有權重除以權重之和,將其重新歸一化。例如
當應用於 DataFrame 時,您可以通過簡單地將列名作為字元串傳遞給 weights 作為采樣權重(前提是您要采樣的是行而不是列)。
sample 還允許用戶使用 axis 參數對列進行抽樣。
最後,我們還可以使用 random_state 參數為 sample 的隨機數生成器設置一個種子,它將接受一個整數(作為種子)或一個 NumPy RandomState 對象
當為該軸設置一個不存在的鍵時, .loc/[] 操作可以執行放大
在 Series 的情況下,這實際上是一個追加操作
可以通過 .loc 在任一軸上放大 DataFrame
這就像 DataFrame 的 append 操作
由於用 [] 做索引必須處理很多情況(單標簽訪問、分片、布爾索引等),所以需要一些開銷來搞清楚你的意圖
如果你只想訪問一個標量值,最快的方法是使用 at 和 iat 方法,這兩個方法在所有的數據結構上都實現了
與 loc 類似, at 提供了基於標簽的標量查找,而 iat 提供了基於整數的查找,與 iloc 類似
同時,你也可以根據這些索引進行設置值
如果索引標簽不存在,會放大數據
另一種常見的操作是使用布爾向量來過濾數據。運算符包括:
|(or) 、 &(and) 、 ~ (not)
這些必須用括弧來分組,因為默認情況下, Python 會將 df['A'] > 2 & df['B'] < 3 這樣的表達式評估為 df['A'] > (2 & df['B']) < 3 ,而理想的執行順序是 (df['A'] > 2) & (df['B'] < 3)
使用一個布爾向量來索引一個 Series ,其工作原理和 NumPy ndarray 一樣。
您可以使用一個與 DataFrame 的索引長度相同的布爾向量從 DataFrame 中選擇行
列表推導式和 Series 的 map 函數可用於產生更復雜的標准
我們可以使用布爾向量結合其他索引表達式,在多個軸上索引
iloc 支持兩種布爾索引。如果索引器是一個布爾值 Series ,就會引發異常。
例如,在下面的例子中, df.iloc[s.values, 1] 是正確的。但是 df.iloc[s,1] 會引發 ValueError 。
『捌』 python為何規定了種子數,每次還是能產生不同的隨機半徑
這是因為,每次生成隨機數後,它都會自動設置新的種子。
開始,你設置了 random.seed(1) ,設由這個種子 1 產生的第一個隨機數是 x,
然後 Python 會自動把現在的種子設為 x,然後你第二次生成隨機數的時候,使用的種子是 x 而不是 1。
所以,如果你想每次都生成同樣的半徑,那隻需要採取下面兩個措施之一就可碼攔蘆以了:
在 for 循環開衡讓始之前先生成隨機的半徑,然後保存到一個變數里,使用的時候調用這個變數;(推薦)
在每次調用之前都調用 random.seed(1)。即在 for 循環的循遲帶環體開頭處插入 random.seed(1)。
祝你刷題順利!
『玖』 python tf.random_uniform與np.random_uniform有什麼區別
首先應該是np.random.uniform
這兩個回答多少有點大病
兩者雖然函數名相同,但屬於不同的庫,一個是TensorFlow的,一個是numpy的。
就好比你家也有冰箱我家也有冰箱一樣。
tf.random.uniform的屬性變數包括:
shape: 輸出張量的形狀巧運,比如矩陣或者向量的維度
mean: 正態分布的均值,默認為0
stddev: 正態分布的標准差,默認棗寬橡為1.0
dtype: 輸出的類型,默認為tf.float32
seed: 隨機數種子,是一個整數,當設置之後,每次生成的隨機數都一樣
name: 操作的名稱
np.random.uniform的屬性變數包括:
low: 采樣下界,float類型,默認值為0
high: 采樣上界,float類型,默認值為1
size: 輸出樣本數目,為int或元組(tuple)類型
tensorflow是生成均勻分布,而numpy則是凳旁在分布中做隨機采樣
『拾』 python函數深入淺出 17.random.randint()函數詳解
random() 函數命名來源於英文單詞random(隨機)。
randint是random + integer拼接簡寫而成,代表隨機一個整數
Python標准庫中的random函數,可以生成隨機浮點數、整數、字元串,甚至幫助你隨機選擇列逗手錶序列中的一個元素,打亂一組數據等。
random.randint() 函數的例子:
用於生成一個指定范圍內的整數。其中參數a是下限,參數b是上限,生成的隨機數n:a<=n<=b
a必須小於或等於b,否隱仔則報錯。
其他random的方法:
無
隨機數是用於生成測試入參的好辦法,也常見於各種需要隨機的場合。
但灶指汪是每次隨機帶來的不確定性也會造成某些驗證功能的困難,因此可以使用random.seed()通過指定隨機的種子值保證每次生成隨機數是同一序列的偽隨機數。觀察下面的輸出:
對基礎運行環境有疑問的,推薦參考: python函數深入淺出 0.基礎篇