[英]“flip” values in numpy array?
我有一個 1 范圍內的數字列表。我想“翻轉”一些數字,但它不應該重復任何現有數字。
我是這樣想象的:
這是第1步:
lst = np.array([5,9,88,55,90,43])
In [95]: z = np.random.choice(lst, 2,replace=False)
Out[95]: array([ 9, 43])
ixs = np.where(lst == z)[0]
#does not guarantee that the new numbers are not already in lst!
lst[ixs] = np.random.choice(xrange(0,n),2,replace=False)
現在我如何確保新的隨機數在不循環檢查的情況下不會重復。
還有其他 numpy 方式嗎?
翻轉意味着從一個值變為另一個值。 您可以將數字列表視為位數組的索引,其中數字指定位是否為 1。
所以翻轉意味着每次翻轉 1 => 0,從 0 => 1 翻轉另一位
輸入:np.array([5,9,88,55,90,43]) 輸出:np.array([5,9,46,55,21,43])
兩個數字被改變了
您可以使用集合。
s = set(xrange(0, n))
lst[ixs] = np.random.choice(s.difference(lst), 2, replace=False)
如果它更有效,這是有爭議的,但它肯定更清潔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.