Forum >> Programmazione Python >> Calcolo scientifico >> sottoclasse ndarray o ndarray come attributo?

Pagina: 1

Ciao a tutti,

dovrei creare una classe di oggetti fondamentalmente contenenti un contenuto di informazione pari a due array (x e y) che identificano una funzione campionata. Il dominio risulta discretizzato a step costanti dunque in realtà da memorizzare basterebbe un solo array (y) e 2 attributi (esempio x_iniziale e step oppure x_iniziale e x_finale).

Detto questo le soluzioni a cui pensavo erano le seguenti:

- classe avente come attributi un np.ndarray e 2 attributi (eseguendo override di __add__, __mul__, etc);

- sottoclasse np.ndarray aggiungendo 2 attributi;

- utilizzare un np.ndarray bidimensionale salvando sia x che y.

Il dubbio è legato al fatto che, eseguendo la classe pura e semplice potrebbe diventare prolisso sovrascrivere tutti i metodi di operazioni fondamentali (inoltre potrebbe risultare complicato gestire la compatibilità con semplici array numpy nelle operazioni fondamentali * + - / etc).

La sottoclasse mi sembrava una bella soluzione ma non vorrei entrare in territorio difficile poi da gestire (nel caso dovessi mettere mano alle ufunc? inoltre avendo solo vettori 1D dovrei inserire mille mila controlli?), ha però il vantaggio di avere quasi tutte le operazioni che mi servono già implementate negli ndarray.

Detto ciò voi cosa fareste?



--- Ultima modifica di Bibo90 in data 2019-03-11 22:08:53 ---
mah sai, è il vecchio dubbio "sottoclasse o composizione/delegazione", e l'esperienza insegna che la composizione è una buona idea più spesso del sottoclassamento. Ma ovviamente dipende dalle operazioni che dovrai fare. E dipende se la classe che vorresti sottoclassare è pensata apposta per il sottoclassamento oppure no. Nel tuo caso mi sembra di no, ma questo non vuol dire che sia impossibile farlo.
Cosa intendi per pensata per il sottoclassamento? Puoi farmi un esempio? Perché sono davvero indeciso su come procedere e magari qualche esempio potrebbe chiarirmi le idee.. Per il momento stavo dando un occhiata su come era scritta la sottoclasse matrix (anche se da quanto leggevo ne sconsigliano l utilizzo).
Nel mio caso sicuramente dovrei sovrascrivere __add__ e probabilmente altri operatori.






Una classe pensata per il sottoclassamento è una classe astratta con metodi "virtuali" da sovrascrivere (o qualunque sia la terminologia equivalente del linguaggio scelto). O anche, per dire un esempio di classe non astratta, un "container" in un gui framework (wx.Frame, QtGui.QMainWindow, ...): sono classi che, semplicemente istanziate, non hanno molto senso: perché abbiano senso occorre sottoclassarle.
be dunque in questo senso... non ha mai senso effettuare una sottoclasse di np.ndarray xD... in quanto gli array numpy non sono di sicuro una classe astratta e tantomeno pensata in questa logica per effettuarne una sottoclasse... ma dunque perchè documentare così bene su come effettuarne una sottoclasse?


Per il momento sto provando entrambe le versioni comunqe e sono tutt'ora indeciso... da un lato con una sottoclasse dovrei scrivere meno codice perchè utilizzerei molte funzioni già dell'array numpy... dall'altro molte di queste non mi servono e/o potrebbero anche creare dei conflitti (ad esempio trattando solo array 1d funzioni come reshape creerebbero degli oggetti che non hanno praticamente senso).



Pagina: 1



Esegui il login per scrivere una risposta.