Forum >> Principianti >> Numero di righe e colonne in matrice

Pagina: 1 2 Avanti

Ciao a tutti, sono un Medico che da un po' di tempo usa Python nel proprio lavoro...
lo so che vi presento un problema banale ma non riesco a risolverlo. Ho importato una matrice bidimensionale (con numpy.loadtxt...), e devo contare le righe e le colonne...
Sto impazzendo per trovare come fare... Davvero, ho cercato ovunque... Sto facendo giri assurdi...
Grazie...


Ciao Giorgio, posta il codice e la matrice ottenuta, così facciamo un ragionamento concreto con quanto hai ottenuto e quanto vorresti ottenere.

Ciao.
Daniele
Ecco il codice:
Carica le matrici A e B che sono in rapporto tra loro: il numero di righe di B sarà il numero di colonne della nuova matrice Eadi dopo aver trattato la matrice A.
Genero la matrice Eadi ed elimino le righe di troppo di soli 0 in fondo.
Questa funzione calcoli è poi inserita all'interno di una interfaccia grafica per valutare ogni singola colonna della matrice Eadi (plot dei punti) e decidere se tenerla o eliminarla. Effettuare alcuni calcoli sulle colonne e alla fine salvare il tutto in un db SQLite.
Le occasioni per contare il numero di righe e colonne sono molti e avere una funzione che lo fa sarebbe utile. Per es il size di Matlab restituisce il numero di righe e colonne...
Spero di essere stato chiaro

def Calcoli()

### Carico le matrici (poi il path sarà sostituito con :filedialog.askdirectory()

    path = "/Users/giorgio/Documents/Python/Progetti/PI Index/Dati/Prova Nava"
    A = np.loadtxt(path + "/001_ServoCurveData 0000.nta", comments="%", usecols=(3, 4, 5, 6))
    B = np.loadtxt(path + "/001_TrendTidalVolume 0000.nta", comments="%", usecols=(3, 4))

###  Calcolo le righe  indirettamente come numero_totale_di_elementi/colonne
 
    righe = int(np.size(A) / 4)
    colonne = int(np.size(B) / 2) #le matrici A e B sono correlate  
    Numero Dati = 200
    Eadi = np.zeros([Numero Dati, colonne]) #genero una matrice di solo 0 che poi riempirò


### con questo ciclo uso la colonna 0 della matrice A (sequenza di 1 intervallati da 0) per separare i dati
###  della colonna 3: Ogni sequenza di 1 continua genera una colonna nuova di dati 
###  nella matrice  Eadi

    colonna = 0
    riga = 0
    incr = 1

    for n in range(0, righe):
        if (A[n, 0] == 1) and (incr > 0):
            Eadi[riga, colonna] = A[n, 3]
            riga += 1
            incr += 1
            continue
        if incr > 1:
            colonna += 1
            incr = 1
            riga = 1

####   dalla matrice Eadi elimino le righe in fondo di soli zero    
    for pulizia_righe in range(200, -1, 1): 
        if np.max(Eadi[pulizia_righe, :]) == 0:
            Eadi[pulizia_righe, :] = []

    Eadi = np.round(Eadi / 100, 1)   #arrotondo i valori 

##  A questo punto devo sapere di quante righe è la matrice Eadi pulita. 
###  Posso mettere un contatatore sul ciclo for precedente e trovare per differenza 
##  ma se ho un comando che lo calcola è meglio


C'è qualche errorino di sintassi nel tuo codice e non posso vedere esattamente quello che vedi tu perché non ho il file di partenza.

A sensazione mi verrebbe da dirti che un semplice contatore (o più di uno) potrebbe fare al caso tuo e risolvere facilmente il problema.

Cya
Certo non avendo le matrici di partenza è un casino seguire... Ma il tutto funziona.
Speravo in qualche funzione tipo (righe,colonne)= funzione(matrice) che mi restituisse il numero di righe e di colonne appunto...




Ma tu cosa intendi per contatore?







Certo non avendo le matrici di partenza è un casino seguire... Ma il tutto funziona.
Non lo metto in dubbio, vedevo solo dei piccoli errori di sintassi, come i due punti mancanti dopo la dichiarazione della funzione, il nome di qualche variabile composta da due distinti nomi (Numero Dati) cosa che ti darebbe un syntax error.

Speravo in qualche funzione tipo (righe,colonne)= funzione(matrice) che mi restituisse il numero di righe e di colonne appunto...

Ma l'oggetto restituito che cos'è? Fammi vedere il risultato.

Ma tu cosa intendi per contatore?
Intendo "qualcosa" che venga incrementato o decrementato seguendo l'andamento del tuo flusso di creazione.

Esempio terra terra:
>>> contatore = 0
>>> for n in range(10):
       [...]
       contatore += 1
>>> print(contatore)
10
Cya
Per la sintassi i : non li ho copiati e i nomi doppi sono con underscore (che non mi ha preso per non so quale motivo)...
Ti allego il file dati.csv che è la matrice Eadi salvata ed è quello del quale dovrei conoscere il numero di righe e colonne (i dati sono float n.n separati da virgole)
Allegati
se vuoi ti invio anche le due matricole di partenza...
matricole = matrici... maledetto correttore!!!!
Per la sintassi i : non li ho copiati e i nomi doppi sono con underscore (che non mi ha preso per non so quale motivo)...
Ti allego il file dati.csv che è la matrice Eadi salvata ed è quello del quale dovrei conoscere il numero di righe e colonne (i dati sono float n.n separati da virgole)

Sì, mandami anche le matrici, così vedo esattamente l'oggetto restituito. Infatti mi sono spiegato male, intendevo che oggetto Python fosse, non tanto il risultato, quello interessa più a te. ;)

Vado a sensazione, ma dove leggo for n in range(0, righe) non hai già il numero di righe spurie? Bene quando togli gli 0.0 col ciclo successivo, eliminalo anche dal numero totale ed hai quanto cerchi.

Cya


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.