我有一個非常大的numpy的陣列,我想,如果它是唯一的對它進行排序和測試。有效地確定是否大排序numpy的陣列具有唯一的值
我知道的功能numpy.unique
,但它排序陣列另一個時間去實現它。
我需要數組排序的原因先驗是因爲從argsort
函數返回的鍵將用於重新排序另一個數組。
我正在尋找一種方式,而不需要數組排序再次做到既(argsort
和獨特的測試)。
示例代碼:
import numpy as np
import numpy.random
# generating random arrays with 2^27 columns (it can grow even bigger!)
slices = np.random.random_integers(2 ** 32, size = 2 ** 27)
values = np.random.random_integers(2 ** 32, size = 2 ** 27)
# get an array of keys to sort slices AND values
# this operation takes a long time
sorted_slices = slices.argsort()
# sort both arrays
# it would be nice to make this operation in place
slices = slices[sorted_slices]
values = values[sorted_slices]
# test 'uniqueness'
# here, the np.unique function sorts the array again
if slices.shape[0] == np.unique(slices).shape[0]:
print('it is unique!')
else:
print('not unique!')
兩個陣列slices
和values
具有1行和列相同的(巨大)號碼。
在此先感謝。
是我們這只是玩具示例數據,或者是你真正用2^27個或更多的32位整數的工作? –
@StefanPochmann我確實有這個數的整數工作,因爲這是一個科學的應用。 – Marco
然後,您幾乎可以用'False' :-)替換您的唯一性檢查。非常快,在10^500000次嘗試中只有一次錯誤,即幾乎從不錯過。 –