2013-03-18 9 views
44

numpy.random.shuffle(x) और numpy.random.permutation(x) के बीच क्या अंतर है?शफल बनाम परमिट numpy

मैंने दस्तावेज़ पृष्ठों को पढ़ा है लेकिन मुझे समझ में नहीं आया कि क्या दोनों के बीच कोई अंतर था जब मैं केवल सरणी के तत्वों को यादृच्छिक रूप से शफल करना चाहता हूं।

अधिक सटीक मानने के लिए मेरे पास एक सरणी x=[1,4,2,8] है।

यदि मैं एक्स के यादृच्छिक क्रमपरिवर्तन उत्पन्न करना चाहता हूं, तो shuffle(x) और permutation(x) के बीच क्या अंतर है?

उत्तर

55

np.random.permutationnp.random.shuffle से दो अंतर है:

  • यदि एक सरणी पारित कर दिया, यह सरणी के एक shuffled प्रतिलिपि प्राप्त होगा; np.random.shuffle सरणी inplace
  • अगर एक पूर्णांक से पारित कर दिया है, यह एक shuffled रेंज यानी np.random.shuffle(np.arange(n))

If x is an integer, randomly permute np.arange(x). If x is an array, make a copy and shuffle the elements randomly.

स्रोत कोड को समझने के लिए इस मदद कर सकता है वापस आ जाएगी shuffles:

3280  def permutation(self, object x): 
... 
3307   if isinstance(x, (int, np.integer)): 
3308    arr = np.arange(x) 
3309   else: 
3310    arr = np.array(x) 
3311   self.shuffle(arr) 
3312   return arr 
+0

जब 'पांडा.इंडेक्स' पर उपयोग किया जाता है, केवल 'क्रमपरिवर्तन' काम करता है और 'शफल' नहीं होता है। यह मामला आपके स्पष्टीकरण में कैसे फिट है? – Heisenberg

+0

@ हेइसेनबर्ग 'क्रमपरिवर्तन' ने अपने तर्क को अंडारे में कॉपी किया है (प्रतिलिपि करके); 'पांडास। इंडेक्स' एक अंडारे से पर्याप्त रूप से अलग है कि 'शफल' इस पर काम नहीं करेगा, लेकिन इससे निर्मित एक अंडारे पर काम करेगा। – ecatmur

14

करने पर जोड़ा जा रहा है क्या @ecatmur ने कहा, np.random.permutation उपयोगी है जब आपको आदेशित जोड़े को घुमाने की आवश्यकता होती है, खासकर वर्गीकरण के लिए:

from np.random import permutation 
from sklearn.datasets import load_iris 
iris = load_iris() 
X = iris.data 
y = iris.target 

# Data is currently unshuffled; we should shuffle 
# each X[i] with its corresponding y[i] 
perm = permutation(len(X)) 
X = X[perm] 
y = y[perm] 
+0

मैं इसे प्राप्त करता रहता हूं: TypeError: केवल पूर्णांक स्केलर सरणी को स्केलर इंडेक्स में परिवर्तित किया जा सकता है –