Seleziona una pagina

## Python matrix

In Python we can create matrix using a double for loop, or we can just use the Numpy library.

In this lesson we will create arrays using iterative instructions, later we will see the use of Numpy.

## Python matrix – first exercise

In this first exercise we use a double for loop to create arrays with random numbers.

In particular, we will create a 3 x 3 matrix, but then we will generalize the algorithm by creating matrices of custom size.

First of all, since I have to generate random numbers, I import the random module and in particular randint.

After, I create an empty list and with the first for loop I go through all the lines. For each line it uses another for loop and I generate a list of 3 random numbers. At the end of the innermost loop I use Python’s append method to append the generated list to the starting matrix.

Here is a possible solution to create matrix in Python:

from random import randint

matrix = []

for i in range(3):
n = []
for j in range(3):
number = randint(1,100)
n.insert(i,number)

matrix.append(n)

print(matrix)

We can populate an array with a while loop, but that’s not the optimal solution. In fact, remember that when we know exactly how many times a loop must be executed, we use the for. The while is used instead when I need to satisfy a condition.

from random import randint
matrix = []
i=0
while i < 3:
j = 0
n = []
while j < 3:
number = randint(1,100)
n.insert(i,number)
j = j+1
matrix.append(n)
i = i+1
print(matrix)

Let’s now create a function in Python to generate a matrix:

from random import randint

def matrix(x,y):
matrix = []

for i in range(x):
n = []

for j in range(y):
number = randint(1,100)
n.insert(i,number)

matrix.append(n)

return matrix

print(matrix(3,3))

In this way we can generate matrices of any size.

## Python matrix – second exercise

We ask the user as input for the size of the matrix to be generated.

from random import randint

def matrix(x,y):
matrix = []

for i in range(x):
n = []

for j in range(y):
number = randint(1,100)
n.insert(i,number)

matrix.append(n)

return matrix

x = int(input('enter the x dimension of the matrix '))
y = int(input('enter the y dimension of the matrix '))

print(matrix(x,y))

Let’s try the code just generated in the compiler below:

In this Python lesson we developed matrix by simply using a double for loop. In the next few lessons we will study Numpy.

Python tutorial

Python Compiler

## Python matrici

In Python è possibile creare delle matrici utilizzando due semplici cicli for, oppure è possibile utilizzare semplicemente la libreria Numpy.

In questa lezione creeremo delle matrici utilizzando le istruzioni iterative, più avanti vedremo l’utilizzo di Numpy.

## Python matrici – primo esercizio

In questo primo esercizio utilizziamo un doppio ciclo for per creare delle matrici con dei numeri random.

In particolare creeremo una matrice 3 x 3, ma poi generalizzeremo l’algoritmo creando matrici di dimensione personalizzata.

Innanzitutto, siccome devo generare dei numeri random, importo il modulo random ed in particolare randint.

Dopo, creo una lista vuota e con il primo ciclo for scorro tutte le righe. Per ogni riga utilizza un altro ciclo for e genero una lista di 3 numeri random. Alla fine del ciclo più interno utilizzo il metodo append di Python per appendere la lista generata alla matrice di partenza.

Ecco dunque una possibile soluzione per creare in Python delle matrici:

from random import randint

matrix = []

for i in range(3):
n = []
for j in range(3):
number = randint(1,100)
n.insert(i,number)

matrix.append(n)

print(matrix)

Possiamo popolare una matrice con un ciclo while, ma non è la soluzione ottimale. Ricordiamo infatti che quando sappiamo esattamente quante volte deve essere eseguito un ciclo si utilizza il for. Il while si utilizza invece quando devo soddisfare una condizione.

from random import randint
matrix = []
i=0
while i < 3:
j = 0
n = []
while j < 3:
number = randint(1,100)
n.insert(i,number)
j = j+1
matrix.append(n)
i = i+1
print(matrix)

Creiamo adesso una funzione per generare una matrice.

from random import randint

def matrix(x,y):
matrix = []

for i in range(x):
n = []

for j in range(y):
number = randint(1,100)
n.insert(i,number)

matrix.append(n)

return matrix

print(matrix(3,3))

In questo modo possiamo generare delle matrici di qualsiasi dimensione.

## Python matrici – secondo esercizio

Chiediamo in input all’utente la dimensione della matrice da generare.

from random import randint

def matrix(x,y):
matrix = []

for i in range(x):
n = []

for j in range(y):
number = randint(1,100)
n.insert(i,number)

matrix.append(n)

return matrix

x = int(input('inserisci la dimensione x della matrice '))
y = int(input('inserisci la dimensione y della matrice '))

print(matrix(x,y))

Proviamo il codice appena generato nel compilatore sotto:

In questa lezione su Python abbiamo sviluppato delle matrici utilizzando semplicemente un doppio ciclo for. Nelle prossime lezioni studieremo Numpy.

#### Esplora il mondo della programmazione con il libro “50 Algoritmi per imparare Python” e libera la tua creatività!

Indice tutorial Python

## Selection Sort Python

Sviluppiamo il selection sort in Python, un algoritmo di ordinamento, molto simile all’Insertion Sort e che opera in place. innanzitutto ricordiamo che con il termine in place si intende che non si utilizza dello spazio di memoria extra o tutt’al più un piccolo spazio.

L’algoritmo opera per confronto tra due elementi dell’array, spostando di volta in volta l’elemento più piccolo nella posizione corretta.

## Selection Sort Python – come funziona

Spieghiamo, dunque, passo passo il ragionamento che sta alla base di questo algoritmo.

Data una lista iniziale di numeri interi, innanzitutto supponiamo di voler ordinarla in ordine crescente.

Dunque, con un ciclo for si scorre la lista dalla posizione 0 alla posizione n-2, dove n è la dimensione della lista, ovvero la sua lunghezza.

for i in range(n – 1):

Si assegna ad una variabile, l’indice più piccolo, ovvero l’indice 0.

min_index = i

Dopo, si utilizza un altro ciclo for per scorrere la lista partendo questa volta dalla posizione 1 (i+1) fino ad arrivare alla posizione n-1:

for j in range(i + 1, n):

Così, l’utilizzo dei due cicli for e dei due indici diversi ci consente di poter effettuare i controlli in loco.

Quindi, si confronta ciascun elemento con il valore minimo e si effettua lo scambio se si trova un valore più piccolo:

if array[j] < array[min_index]:
min_index = j

Infine si inserisce l’elemento in posizione:

array[min_index], array[i] = (array[i], array[min_index])

Ecco, quindi, una possibile implementazione dell’algoritmo Selection Sort in Python:

def selection_sort(array):

n = len(array)

for i in range(n - 1):
min_index = i

for j in range(i + 1, n):
if array[j] < array[min_index]:
min_index = j

#inseriamo il minimo nella posizione corretta
array[min_index], array[i] = (array[i], array[min_index])
return array
numbers = [6,12,4,3,7,8]
print(selection_sort(numbers))

Provate il codice nel compiler online di sotto, per testare il funzionamento:

Analogamente se volessimo ordinare l'array in senso decrescente:

def selection_sort(array):

n = len(array)

for i in range(n - 1):
max_index = i

for j in range(i + 1, n):
if array[j] > array[max_index]:
max_index = j

array[max_index], array[i] = (array[i], array[max_index])
return array

numbers = [6,12,4,3,7,8]
print(selection_sort(numbers))

In questa lezione abbiamo sviluppato l'algoritmo di ordinamento Selection Sort in Python, nelle prossime lezioni studieremo altri algoritmo di ordinamento.