簡體   English   中英

numpy 數組中的“翻轉”值?

[英]“flip” values in numpy array?

我有一個 1 范圍內的數字列表。我想“翻轉”一些數字,但它不應該重復任何現有數字。

我是這樣想象的:

  1. 選擇要翻轉的數字
  2. 翻轉它們,但檢查它們是否重復

這是第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM