Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Έχω κάνει ένα πρόγραμμα σε python για λίστες και θέλω να κάνω μια αλλαγή και δεν μου βγαίνει

class ML(list):
  
  def reshape(self,*dimesions):
    dimesions=list(dimesions)
    mul=1
    for i in dimesions:
      mul*=i
    if mul!=len(self):
      raise (ValueError)("The product of dimensions should me equal to {}".format(len(self)))
    if len(dimesions)>1:
      current = dimesions.pop()
    else:  # finished!
      return ML(self)
    result=[]
    index=0
    while index<len(self) :
      result.append(list(self[index:index+current]))
      index+=current
    return ML.reshape(result,*dimesions)

  def flatten(self):
    c=''.join([i for i in str(self)if i not in'[] ']).strip(',')
    return ML(list(map(int,c.split(','))))
    
 
    

Αυτό κάνει reshape σε μια λίστα flat και τις δίνει τις διαστάσεις που θέλω δηλαδή

>>> a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
>>> from ml import ML
>>> b=ML(a)
>>> c=b.flatten()
>>> c
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> d=c.reshape(2,6)
>>> d
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]
>>> d=d.flatten()
>>> d=d.reshape(2,2,3)
>>> d
[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
Πρέπει κάθε φορά που καλώ την reshape να κάνω τη λίστα flat. Καμία ιδέα να μήν χρειάζεται αυτό

Επίσης προκειμένου να μου επιστρέψει αντικείμενο ML χρησιμοποιώ πολλές φορές το ML μέσα στη μέθοδο. Πώς μπορώ να το αποφύγω

και κάθε άλλη πρόταση για βελτιώση θα με βοηθούσε

Επεξ/σία από k33theod
Δημοσ. (επεξεργασμένο)

Είναι κάποιες συναρτήσεις με λίστες που χρησιμοποιώ συχνά και σκέφτηκα να τις τυποποιήσω

Για να δουλέψει η reshape χρειάζεται flat λίστα και θέλω να δουλεύει και με άλλες. Τελικά το έκανα και φαίνεται να δουλεύει πρέπει όμως να το ψάξω λίγο ακόμα. Έκανα μια καινούργια μέθοδο και έβαλα μέσα και το flatten. 

class ML2(list):
  
  def reshape(self,*dimesions):
    self=self.flatten()
    return self._reshape(*dimesions)  

  def _reshape(self,*dimesions):
    dimesions=list(dimesions)
    mul=1
    for i in dimesions:
      mul*=i
    if mul!=len(self):
      raise (ValueError)("The product of dimensions should me equal to {}".format(len(self)))
    if len(dimesions)>1:
      current = dimesions.pop()
    else:  # finished!
      return ML2(self)
    result=[]
    index=0
    while index<len(self) :
      result.append(list(self[index:index+current]))
      index+=current
    return ML2._reshape(result,*dimesions)

  def flatten(self):
    c=''.join([i for i in str(self)if i not in'[] ']).strip(',')
    return ML2(list(map(int,c.split(','))))	
  
  

Δηλαδή

>>> a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
>>> from ml import ML2
>>> b=ML2(a)
>>> b
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
>>> c=b.reshape(6,2)
>>> c
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]
Επεξ/σία από k33theod
Δημοσ.

Είναι πράγματα που τα είχα έτοιμα και τα βάζω σε κλάση σαν εξάσκηση και για να τα έχω μαζεμένα.

Τα είχα γράψει για ασκήσεις σε πλατφόρμα που δεν μπορείς να κάνεις install άλλες βιβλιοθήκες

 

Το numpy το θεωρώ πολύ σημαντική βιβλιοθήκη για να την προσβάλω  :-)

 

'Δανείστηκα' ονόματα μεθόδων και ιδιοτήτων αλλά η βάση μου είναι το class list ενώ το nd array είναι τελείως διαφορετικό.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...