अजगर के साथ एक सरणी फेरबदल करने का सबसे आसान तरीका क्या है?
new_array = random.sample( array, len(array) )
।
अजगर के साथ एक सरणी फेरबदल करने का सबसे आसान तरीका क्या है?
new_array = random.sample( array, len(array) )
।
जवाबों:
import random
random.shuffle(array)
import random
random.shuffle(array)
वैकल्पिक तरीका यह sklearn का उपयोग कर
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)
आउटपुट:
[2, 1, 3]
['two', 'one', 'three']
लाभ: आप मानचित्रण को बाधित किए बिना एक साथ कई सरणियों को यादृच्छिक कर सकते हैं। और 'random_state' प्रजनन योग्य व्यवहार के लिए फेरबदल को नियंत्रित कर सकता है।
अन्य उत्तर सबसे आसान हैं, हालांकि यह थोड़ा कष्टप्रद है कि random.shuffle
विधि वास्तव में कुछ भी नहीं लौटाती है - यह केवल दी गई सूची को सॉर्ट करती है। यदि आप कॉल को चेन करना चाहते हैं या केवल एक पंक्ति में एक फेरबदल सरणी घोषित करने में सक्षम हैं, तो आप कर सकते हैं:
import random
def my_shuffle(array):
random.shuffle(array)
return array
तो फिर आप लाइनों की तरह कर सकते हैं:
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
जब नियमित पायथन सूचियों के साथ काम करते हैं, random.shuffle()
तो पिछले उत्तरों की तरह ही काम करेंगे।
लेकिन जब यह ndarray
( numpy.array
) आता है, random.shuffle
तो मूल को तोड़ने लगता है ndarray
। यहाँ एक उदाहरण है:
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
महज प्रयोग करें: np.random.shuffle(a)
जैसे random.shuffle
, np.random.shuffle
जगह में सरणी फेरबदल।
यदि आप एक नई सरणी चाहते हैं, तो आप इसका उपयोग कर सकते हैं sample
:
import random
new_array = random.sample( array, len(array) )
आप यादृच्छिक सरणी के साथ अपने सरणी को सॉर्ट कर सकते हैं
sorted(array, key = lambda x: random.random())
कुंजी को केवल एक बार पढ़ा जाना चाहिए ताकि तुलना के दौरान आइटम की तुलना अभी भी कुशल हो।
लेकिन जैसे दिखते हैं random.shuffle(array)
C में लिखा गया है वैसा ही तेज होगा
array
मेरा मतलब Random
तत्व था: अर्थातlambda
random.random()
नया पैदा हो सकता है Random
वर्ग उदाहरण हर बार। मुझे वास्तव में यकीन नहीं है: java
इसमें ऐसा करने का गलत तरीका होगा: आपको एक बनाना चाहिए Random rng = Random()
और फिर आह्वान करना चाहिए rng.nextGaussian()
। लेकिन यकीन नहीं होता कि अजगर कैसे random.random()
काम करता है
मुझे नहीं पता कि मैंने इसका इस्तेमाल किया है, random.shuffle()
लेकिन यह मेरे लिए 'कोई नहीं' लौटाता है, इसलिए मैंने इसे लिखा, जो किसी के लिए उपयोगी हो सकता है
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
विदित हो कि random.shuffle()
इसका उपयोग बहु-आयामी सरणियों पर नहीं किया जाना चाहिए क्योंकि यह दोहराव का कारण बनता है।
कल्पना कीजिए कि आप अपने पहले आयाम के साथ एक सरणी फेरबदल करना चाहते हैं, हम निम्नलिखित परीक्षा उदाहरण बना सकते हैं,
import numpy as np
x = np.zeros((10, 2, 3))
for i in range(10):
x[i, ...] = i*np.ones((2,3))
इतना है कि पहली धुरी के साथ, i-th तत्व एक 2x3 मैट्रिक्स से मेल खाता है, जहां सभी तत्व समान हैं।
यदि हम बहु-आयामी सरणियों के लिए सही फेरबदल फ़ंक्शन का उपयोग करते हैं, अर्थात np.random.shuffle(x)
, सरणी को वांछित के रूप में पहले अक्ष के साथ फेरबदल किया जाएगा। हालाँकि, उपयोग random.shuffle(x)
से पुनरावृत्ति होगी। आप इसे len(np.unique(x))
फेरबदल करने के बाद चला सकते हैं जो आपको 10 (जैसा कि अपेक्षित हो) np.random.shuffle()
का उपयोग करते समय केवल 5 के आसपास देता है random.shuffle()
।