Pagina 1 di 1

Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 10:17
da Frenzi
Ciao ragazzi, avrei bisogno un consiglio: sto "migrando" un progetto da arduino a raspberry (per mancanza di "potenza" dell'arduino), e purtroppo gran parte delle librerie che mi servono sul raspberry sono in python. Io ho sempre programmato in c, e non ho avuto problemi ad imparare le basi del python, ma ci sono alcune cose che proprio non mi piacciono (tipo il dover usare l'indentazione al posto delle parentesi).
Comunque per forza di cose devo riscrivere il programma in python, ma ho una domanda sulle strutture dati: sicuramente ho io qualche "buco" sulle strutture dati in python, però mi è sembrato di capire che gli array multidimensionali non sono "concessi" (o meglio lo sono ma vanno dichiarati in un modo particolare). Il mio programma in C ha una struttura dati leggibile in modo molto semplice con cicli for annidati (uno per ogni ulteriore dimensione dell'array) mediante indici interi, che trovo sinceramente un sistema molto comodo e snello per scorrere all'interno delle strutture. In python ho cercato di riprodurlo con delle classi, ma lo "scorrimento" è molto più macchinoso e il codice è più framentato e meno leggibile. Come posso creare delle strutture "snelle" anche in python? (Esempio di quello con cui mi trovo comodo in c: matrice a 4 dimensioni di interi: int matrix[2][4][5][25] ; in python non riesco a replicarlo).
Grazie a tutti :-)

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 11:29
da EnChamade
Ciao,
se ho capito bene in problema, in Python devi usare la libreria numPy per fare quello che vuoi tu. In particolare, quello che serve a te è questo.

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 12:23
da Frenzi
Grazie mille, proprio quello che cercavo! :ok:

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 12:45
da lucaking
Frenzi ha scritto:...ho sempre programmato in c, e non ho avuto problemi ad imparare le basi del python, ma ci sono alcune cose che proprio non mi piacciono (tipo il dover usare l'indentazione al posto delle parentesi).

Scusa ma penso che questo sia il problema minore, anche perché una buona indentazione a mio avviso è utile anche nel C, se non addirittura indispensabile quando il codice comincia a complicarsi.

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 14:23
da Frenzi
Assolutamente, però le parentesi danno un riferimento inequivocabile mentre con l'indentazione se per caso ti sbagli e cancelli un tab ti cambia tutto il funzionamento del programma

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 17:40
da xyz
Usare un buon editor permette di accorgersi subito di eventuali cattive indentazione nel codice Python.

Un array multidimensionale si può benissimo fare direttamente in Python annidando due liste, basta conoscere bene la sintassi del Python:

Codice: Seleziona tutto
[[x+y for x in range(10)] for y in range(10, 20)]


Puoi usare anche NumPy come è stato già detto.

Nel Python ufficiale esiste il modulo CType il quale permette di accedere direttamente a programmi e strutture dati del C/C++:

https://docs.python.org/3/library/ctypes.html

quindi puoi scrivere librerie dinamiche in C/C+= e accedere dal Python.

Da programmatore C++ posso dire che gli iteratori presenti anche in Python sono più veloci rispetto all'uso degli indici numerici, in generale.

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 18:00
da Frenzi
Ok, grazie. Purtroppo sono ancora a digiuno di python.. ho iniziato a lavorarci qualche settimana fa e sto ancora "ingranando". In teoria posso aggiungerci n dimensioni utilizzando lo stesso "pattern", ad esempio:[ [x+y+z for x in range(10)] for y in range(32)] for z in range(50)](Matrice 10x32x50) , corretto? Sapresti linkarmi una reference su questo argomento?

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 18:12
da xyz
Frenzi ha scritto:... ad esempio:[ [x+y+z for x in range(10)] for y in range(32)] for z in range(50)](Matrice 10x32x50) , corretto? ...

Le parantesi non sono bilanciate ma è corretto.

Python è open source quindi si può capire come funziona dai suoi sorgenti o leggere direttamente la documentazione ufficiale:

https://docs.python.org/3.9/tutorial/da ... rehensions

Re: Array multidimensionali da C a Python

MessaggioInviato: 4 feb 2021, 19:37
da Frenzi
Si scusami ho dimenticato una quadra all'inizio. Perfetto grazie ancora :ok: