2016-03-24 31 views
4

Sadece bir satır dizisinin sırasını sıralamak istiyorum. Bu satırlar her zaman sürekli olacaktır (örneğin, 23-80 satırları karıştırma). Her satırdaki elemanların sayısı 1'den (dizi aslında 1D gibi) 100'e kadar değişebilir.Bazı satırların numpy dizisinde sırasına göre sıralanması

Aşağıda, shuffle_rows() yönteminin nasıl çalıştığını nasıl gördüğümü gösteren örnek kod verilmiştir. Bu karıştırmayı verimli bir şekilde yapmak için böyle bir yöntemi nasıl tasarlarım?

import numpy as np 
>>> a = np.arange(20).reshape(4, 5) 
>>> a 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19]]) 

>>> shuffle_rows(a, [1, 3]) # including rows 1, 2 and 3 in the shuffling 
array([[ 0, 1, 2, 3, 4], 
     [15, 16, 17, 18, 19], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14]]) 

cevap

3

Sen np.random.shuffle kullanabilirsiniz. Bu satırların içindeki öğeleri değil, satırları karıştırır. Kaynaktan

docs:

import numpy as np 


def shuffle_rows(arr,rows): 
    np.random.shuffle(arr[rows[0]:rows[1]+1]) 

a = np.arange(20).reshape(4, 5) 

print(a) 
# array([[ 0, 1, 2, 3, 4], 
#  [ 5, 6, 7, 8, 9], 
#  [10, 11, 12, 13, 14], 
#  [15, 16, 17, 18, 19]]) 

shuffle_rows(a,[1,3]) 

print(a) 
#array([[ 0, 1, 2, 3, 4], 
#  [10, 11, 12, 13, 14], 
#  [15, 16, 17, 18, 19], 
#  [ 5, 6, 7, 8, 9]]) 

shuffle_rows(a,[1,3]) 

print(a) 
#array([[ 0, 1, 2, 3, 4], 
#  [10, 11, 12, 13, 14], 
#  [ 5, 6, 7, 8, 9], 
#  [15, 16, 17, 18, 19]]) 
+0

I deneyin ': Bu fonksiyon sadece bir örnek olarak, bir çok-boyutlu bir dizi

ilk dizin boyunca dizi karıştırır

çıktı (shuffle_rows (a, [1,3])) 'Python 3'te çıktıda" Yok "alıyorum? – pir

+1

shuffle yerinde yapılır. baskı (a) 've – tom

+0

Ah karışık satırları göreceksiniz, mantıklı. Açıklama için teşekkürler! – pir

İlgili konular