6 HAZİRAN 2013, PERŞEMBE
Numpy benzersiz satırları bulmak.dizi
numpy.array
benzersiz satırları bulmak lazım.
Örneğin:
>>> a # I have
array([[1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0]])
>>> new_a # I want to get to
array([[1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0],
[1, 1, 1, 1, 1, 0]])
Bir dizi oluşturma ve dizi üzerinde döngü biliyorum, ama numpy
verimli saf bir çözüm arıyorum. Veri türü void için ayarlamak için bir yol var ve o zaman sadece numpy.unique
, ben inanıyorum ama bu işi nasıl yapacağımı bulamadım.
CEVAP
6 HAZİRAN 2013, PERŞEMBE
Yapısal diziler kullanmak için başka bir seçenek, tek bir madde içine: bütün satır birleştiren void
Bir tür bir görünüm kullanarak
a = np.array([[1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0]])
b = np.ascontiguousarray(a).view(np.dtype((np.void, a.dtype.itemsize * a.shape[1])))
_, idx = np.unique(b, return_index=True)
unique_a = a[idx]
>>> unique_a
array([[0, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0]])
EDİT
Eklendi np.ascontiguousarray
@seberg tavsiyesi şu. Bu dizi zaten bitişik ise bu yöntem biraz yavaşlar.
EDİT Yukarıda biraz hızlandırdı, yaparak belki netlik pahasına, olabilir:
unique_a = np.unique(b).view(a.dtype).reshape(-1, a.shape[1])
Ayrıca, en azından benim sistemde, performans akıllıca eşit ya da daha iyisi, lexsort yöntemi daha
a = np.random.randint(2, size=(10000, 6))
%timeit np.unique(a.view(np.dtype((np.void, a.dtype.itemsize*a.shape[1])))).view(a.dtype).reshape(-1, a.shape[1])
100 loops, best of 3: 3.17 ms per loop
%timeit ind = np.lexsort(a.T); a[np.concatenate(([True],np.any(a[ind[1:]]!=a[ind[:-1]],axis=1)))]
100 loops, best of 3: 5.93 ms per loop
a = np.random.randint(2, size=(10000, 100))
%timeit np.unique(a.view(np.dtype((np.void, a.dtype.itemsize*a.shape[1])))).view(a.dtype).reshape(-1, a.shape[1])
10 loops, best of 3: 29.9 ms per loop
%timeit ind = np.lexsort(a.T); a[np.concatenate(([True],np.any(a[ind[1:]]!=a[ind[:-1]],axis=1)))]
10 loops, best of 3: 116 ms per loop
Bunu Paylaş:
numpy: en verimli bir dizi benzersiz d...
Daha hızlı, iki dizi arasında benzersi...
Nasıl bir dizi alanı benzersiz bir değ...
Yineleme numpy bir dizi...
Python Liste yapıya dönüştürülmesi Num...