Bir diziyi python ile karıştırmanın en kolay yolu nedir?
new_array = random.sample( array, len(array) )
.
Bir diziyi python ile karıştırmanın en kolay yolu nedir?
new_array = random.sample( array, len(array) )
.
Yanıtlar:
import random
random.shuffle(array)
import random
random.shuffle(array)
Bunu sklearn kullanarak yapmanın alternatif yolu
from sklearn.utils import shuffle
X=[1,2,3]
y = ['one', 'two', 'three']
X, y = shuffle(X, y, random_state=0)
print(X)
print(y)
Çıktı:
[2, 1, 3]
['two', 'one', 'three']
Avantajı: Eşlemeyi bozmadan birden fazla diziyi aynı anda rastgele sıralayabilirsiniz. Ve 'random_state', tekrarlanabilir davranış için karıştırma işlemini kontrol edebilir.
Diğer cevaplar en kolay olanıdır, ancak random.shuffle
yöntemin aslında hiçbir şey döndürmemesi biraz can sıkıcıdır - sadece verilen listeyi sıralar. Çağrıları zincirlemek veya yalnızca bir satırda karıştırılmış bir dizi bildirmek istiyorsanız şunları yapabilirsiniz:
import random
def my_shuffle(array):
random.shuffle(array)
return array
Sonra aşağıdaki gibi çizgiler yapabilirsiniz:
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
Normal Python listeleriyle uğraşırken, random.shuffle()
, işi önceki cevapların gösterdiği gibi yapar.
Ama ndarray
( numpy.array
) söz konusu olduğunda random.shuffle
, orijinali kırmış gibi görünüyor ndarray
. İşte bir örnek:
import random
import numpy as np
import numpy.random
a = np.array([1,2,3,4,5,6])
a.shape = (3,2)
print a
random.shuffle(a) # a will definitely be destroyed
print a
Sadece kullan: np.random.shuffle(a)
Gibi random.shuffle
, np.random.shuffle
yerinde dizi karıştırır.
Yeni bir dizi istemeniz durumunda şunları kullanabilirsiniz sample
:
import random
new_array = random.sample( array, len(array) )
Dizinizi rastgele anahtarla sıralayabilirsiniz
sorted(array, key = lambda x: random.random())
anahtar sadece bir kez okunabilir bu yüzden sıralama sırasında öğeyi karşılaştırmak hala etkili.
ancak random.shuffle(array)
C dilinde yazıldığı için daha hızlı görünecek
array
Demek Random
elemanı: yani içinde veriyor olabilir yeni sınıf örneğine her seferinde. Aslında emin değilim: bunu yapmak için yanlış bir yol olurdu: bir oluşturmak ve sonra çağırmak gerekir . lambda
random.random()
Random
java
Random rng = Random()
rng.nextGaussian()
random.random()
Kullandığımı bilmiyorum random.shuffle()
ama bana 'Hiçbiri' döndürüyor, bu yüzden bunu yazdım, birine yardımcı olabilir
def shuffle(arr):
for n in range(len(arr) - 1):
rnd = random.randint(0, (len(arr) - 1))
val1 = arr[rnd]
val2 = arr[rnd - 1]
arr[rnd - 1] = val1
arr[rnd] = val2
return arr
Farkında olmak random.shuffle()
bu tekrarları neden olduğundan çok boyutlu diziler üzerinde kullanılmamalıdır.
Bir diziyi ilk boyutu boyunca karıştırmak istediğinizi düşünün, aşağıdaki test örneğini oluşturabiliriz,
import numpy as np
x = np.zeros((10, 2, 3))
for i in range(10):
x[i, ...] = i*np.ones((2,3))
böylece birinci eksen boyunca i-eleman, tüm elemanların i'ye eşit olduğu bir 2x3 matrisine karşılık gelir.
Çok boyutlu diziler için doğru karıştırma işlevini kullanırsak, yani np.random.shuffle(x)
dizi ilk eksen boyunca istenildiği gibi karıştırılır. Ancak, kullanmak random.shuffle(x)
tekrarlara neden olur. len(np.unique(x))
Karıştırmadan sonra koşarak bunu kontrol edebilirsiniz, bu da size 10 (beklendiği gibi) verir np.random.shuffle()
ancak kullanırken sadece yaklaşık 5random.shuffle()
.