我想在 Python 中有效地創建一個具有給定長度和給定數量的 True 值的隨機布爾陣列。我找不到一個命令來執行此操作,以下是我想要的(兩次)。有什么更優雅的方法嗎?
import numpy as np
def randbool(length,numtrue):
index_array=np.random.choice(length,numtrue,replace=False)
bool_array=np.zeros(length,dtype=bool)
bool_array[index_array]=True
return(bool_array)
def randbool2(length,numtrue):
bool_array=np.hstack((np.tile(True,numtrue),np.tile(False,length-numtrue)))
np.random.shuffle(bool_array)
return(bool_array)
print(randbool(5,2))
print(randbool2(5,2))
uj5u.com熱心網友回復:
還有一個選擇:
def randbool(l,n):
return np.random.permutation(l)<n
np.random.permutation隨機排列np.arange(l)。
uj5u.com熱心網友回復:
另一個建議:
def randbool3(length, numtrue):
return np.random.choice(length, length, replace=False) < numtrue
效率與第一種方法相似,但代碼較短

uj5u.com熱心網友回復:
您的兩個示例都很小n,因此處于原生 Python 代碼比 Numpy 更快的狀態。例如,給定:
from random import shuffle
def randbool4(length, numtrue):
arr = [False] * length
arr[:numtrue] = [True] * numtrue
shuffle(arr)
return arr
我可以randbool4(5,2)在 ~4μs 內執行。您的變體需要約 30μs 和 mozway 的相似,而 obchardon 的 Numpy 變體僅需要約 6μs,這非常接近。
很明顯,當nNumpy 的原生內核??變大時,win 的內核值得指出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/528661.html
標籤:Python麻木的随机的
