2013-02-14 29 views
6

मैं numpy का उपयोग कर रहा हूं और एक सरणी (ndarray प्रकार) है जिसमें कुछ मान हैं। इस सरणी का आकार 1000x1500। जब मैंपायथन, numpy sort array

brr.reverse() 
AttributeError: ‘numpy.ndarray’ object has no attribute ‘reverse’ 

प्राप्त होने वाले त्रुटि की कोशिश कर रहा मैं इसे

brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 

नया रूप। मैं इस सरणी को कैसे सॉर्ट कर सकता हूं?

+0

सॉर्ट या रिवर्स? –

+0

आप 'रिवर्स()' करने की क्या अपेक्षा कर रहे हैं? – NPE

+1

आपकी समस्या का समाधान नहीं करता है, लेकिन आपके कोड को थोड़ा साफ और अधिक कुशल बनाने के लिए आप 'arr.shape [0] * arr.shape [1]' के बजाय 'arr.size' का उपयोग कर सकते हैं। – Junuxx

उत्तर

23

आप इसे उल्टा करने के लिए करना चाहते हैं:

brr[:] = brr[::-1] 

वास्तव में, यह, अक्ष 0. तुम भी किसी अन्य अक्ष पर वापस लौटने सकता है साथ पराजयों यदि सरणी एक से अधिक है।

उलटे क्रम में क्रमबद्ध करने के लिए:

>>> arr = np.random.random((1000,1500)) 
>>> brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 
>>> brr.sort() 
>>> brr = brr[::-1] 
>>> brr 
array([ 9.99999960e-01, 9.99998167e-01, 9.99998114e-01, ..., 
    3.79672182e-07, 3.23871190e-07, 8.34517810e-08]) 

या, argsort का उपयोग कर:

>>> arr = np.random.random((1000,1500)) 
>>> brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 
>>> sort_indices = np.argsort(brr)[::-1] 
>>> brr[:] = brr[sort_indices] 
>>> brr 
array([ 9.99999849e-01, 9.99998950e-01, 9.99998762e-01, ..., 
     1.16993050e-06, 1.68760770e-07, 6.58422260e-08]) 
+0

नहीं, यह छोड़ा गया है, मुझे इसे – user2046488

+0

अवरोही क्रमबद्ध करना होगा! कोई भाग्य के साथ argsort() कोशिश की। [:: - 1] – user2046488

12

अवरोही क्रम में छँटाई के लिए यह प्रयास,

import numpy as np 
a = np.array([1,3,4,5,6]) 
print -np.sort(-a) 
2

में 1 दिन सरणी सॉर्ट करने के लिए अवरोही क्रम, पास रिवर्स = sorted पर सही है। @Erik ने बताया, sorted पहले सूची की एक प्रति बना देगा और फिर इसे विपरीत में सॉर्ट करेगा।

import numpy as np 
import random 
x = np.arange(0, 10) 
x_sorted_reverse = sorted(x, reverse=True) 
+5

सॉर्ट किए गए पाइथन के इटेरिएबल सॉर्ट का उपयोग नहीं किया गया था, जो पहले सभी डेटा को एक सूची में कॉपी करेगा और फिर रिवर्स में सॉर्ट करेगा। हालांकि यह वास्तव में डेटा की एक रिवर्स सॉर्टिंग में परिणाम देता है, यह numpy में ऐसा नहीं करता है, और आम तौर पर numpy का उपयोग करने के किसी भी लाभ को हटा देता है। – Erik

+0

इसे साझा करने के लिए धन्यवाद, एरिक। मैंने इसे जवाब में जोड़ा। – rafaelvalle