NumPy 101: impara NumPy in 10 minuti

Mar 25 2023
Numpy è una popolare libreria Python per il calcolo scientifico e l'analisi dei dati. Fornisce un potente oggetto array, insieme a molte utili funzioni e metodi per la manipolazione e l'elaborazione di dati numerici.

Numpy è una popolare libreria Python per il calcolo scientifico e l'analisi dei dati. Fornisce un potente oggetto array, insieme a molte utili funzioni e metodi per la manipolazione e l'elaborazione di dati numerici. In questo post del blog, condividerò alcune delle operazioni numpy essenziali che possono aiutarti a scrivere codice più veloce e più pulito. Che tu sia un principiante o un esperto, spero che troverai qualcosa di utile in questo cheat sheet intorpidito.

Installazione

Se non hai numpy, devi prima installarlo. Puoi installarlo in due giorni:

Usando il seme

pip install numpy

Innanzitutto, attiva il tuo ambiente anaconda e quindi utilizza il seguente comando:

conda install -c anaconda numpy

Prima di eseguire qualsiasi operazione utilizzando numpy, dobbiamo importarlo.

import numpy as np

Partiamo dalle basi e impariamo come creare valori scalari della classe numpy.

# int type

python_int = 2
numpy_int = np.int32(2)
print(type(python_int)) # ---> <class 'int'>
print(type(numpy_int)) # ---> <class 'numpy.int32'>

# float type

python_float = 2.5
numpy_float = np.float32(2.5)
print(type(python_float)) # ---> <class 'float'>
print(type(numpy_float)) # ---> <class 'numpy.float32'>

Ora è il momento di passare agli array o agli elenchi.

Array 1D

Creiamo ora un array 1-D usando array()il metodo di numpy.

# creating an 1-D array of int type

one_d_array_int = np.array([1,2,3]) 
print(one_d_array_int) # ---> output : [1 2 3]

# creating an 1-D array of float type

one_d_array_float = np.array([1.5,2.5,3.5])
print(one_d_array_float) # ---> output : [1.5 2.5 3.5]

Creiamo ora un array 2D usando array()il metodo di numpy.

# 2-D int array

two_d_array_int = np.array([
                [1,2,3],
                [4,5,6],
                [7,8,9]
               ])
print(two_d_array_int) # ---> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 2-D float array

two_d_array_float= np.array([
                [1.1,2.1,3.0],
                [4.1,5.1,6.1],
                [7.1,8.1,9.1]
               ])
print(two_d_array_float) # ---> [[1.1, 2.1, 3.0], [4.1, 5.1, 6.1], [7.1, 8.1, 9.1]]

Ora impariamo come si ottiene la dimensione di qualsiasi array.

# If the array is a 1-D array, then it'll return 1
print(one_d_array_int.ndim) # ---> output : 1

# If the array is a 2-D array, then it'l return 2
print(two_d_array_int.ndim) # ---> output : 2


print(one_d_array_int.shape) # ---> output : (3,)


print(two_d_array_int.shape) # ---> output : (3, 3)

Ottieni il tipo di dati di un array

print(one_d_array_int.dtype) # ---> output : dtype('int32')

Manipolazione degli elementi di un array

Creiamo un nuovo array e quindi eseguiremo operazioni su questo nuovo array.

a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a) # ---> output : [[ 1  2  3  4  5  6  7]
#                         [ 8  9 10 11 12 13 14]]

Supponiamo di voler accedere al terzo elemento delle prime righe.

# accessing 1st row's 3rd element
print(a[0,2]) # ---> output : 3

Ricorda, numpy segue anche l'indicizzazione basata su 0 e per questo motivo se vogliamo ottenere la prima riga, dobbiamo scrivere 0 e non 1 e lo stesso vale per il valore della colonna se avessimo bisogno del terzo elemento, allora scriveremo 2 e non 3.

Accedi solo a una riga o colonna specifica

# accessing only the first row
print(a[0,:]) # ---> output : [1 2 3 4 5 6 7]

# accessing only the second column
print(a[:,1]) # ---> output : [2 9]

# [startindex:endindex:stepsize]
print(a[0, 1:-1:2]) # ---> output : [2 4 6]

Modifica del valore dell'elemento

a[0,2] = 99
print(a) # ---> output : [[ 1  2 99  4  5  6  7]
#                         [ 8  9 10 11 12 13 14]]

Matrici speciali in Numpy

Matrice Zero

# creating a zero matrix of shape(2,3)

print(np.zeros((2,3))) # ---> output : [[0. 0. 0.]
 #                                      [0. 0. 0.]
 #                                      [0. 0. 0.]]

Una Matrice

# All 1s matrix
print(np.ones((3,2,2))) # ---> output : [[[1. 1.]
#                                        [1. 1.]]
#
#                                        [[1. 1.]
#                                         [1. 1.]]
#                                      
#                                        [[1. 1.]
#                                         [1. 1.]]]

# creating ones matrix int type
print(np.ones((3,2,2)), dtype='int32') # ---> output : [[[1 1]
#                                        [1 1]]
#
#                                        [[1 1]
#                                         [1 1]]
#                                      
#                                        [[1 1]
#                                         [1 1]]]

Matrice casuale

Se vuoi avere un array con valori casuali di una forma specifica, puoi usare np.random.rand()method.

print(np.random.rand(3,3)) # ---> output : [[0.10671372 0.31133182 0.56572354]
#                                           [0.34792672 0.88867917 0.25310353]
#                                           [0.70052117 0.53243035 0.67948057]]

Se vuoi avere un array con valori int casuali di una forma specifica, puoi usare np.random.randint()method.

# np.random.randint(start_value,end_value,size)

print(np.random.randint(-1,5, size=(3,3))) # ---> output : [[0 -1 2]
#                                                           [4 2 1]
#                                                           [4 4 0]]

end_valueè esclusivo, ecco perché non c'è 5 nell'array di output.

Se non menzioni il start_value, il valore iniziale predefinito sarebbe 0. Devi menzionare il end_value.

Matrice identità

Se si desidera creare una matrice di identità, è possibile utilizzare np.identity()method.

print(np.identity(3)) # ---> output : [[1. 0. 0.]
#                                      [0. 1. 0.]
#                                      [0. 0. 1.]]

Array di trasposizione

a = np.random.randint(-1,5, size = (2,3)) # creating a random int array
print(a)                                  # output : [[ 2 -1  1]
                                          #           [ 0  1  1]]

print(a.T)                                # output : [[ 2  0]
                                          #           [-1  1]
                                          #           [ 1  1]]

Se vuoi cambiare la forma dell'array puoi usare reshape()method.

a = np.random.randint(-1,5, size = (2,3)) # creating a random int array
print(a)                                  # output : [[ 2 -1  1]
                                          #           [ 0  1  1]]

print(a.reshape(3,2))                     # output : [[ 2  0]
                                          #           [-1  1]
                                          #           [ 1  1]]

print(a.reshape(1,6))                     # output : [[1 2 3 2 2 2]]

Riempi con qualsiasi numero

Se vuoi che un aray sia riempito con un valore specifico, puoi usare np.full()method.

print(np.full((3,3), 14)) # ---> output : [[14 14 14]
#                                          [14 14 14]
#                                          [14 14 14]]

Se vuoi avere un array con un valore specifico e vuoi che abbia la stessa forma di un altro array, allora puoi usare np.full_like()method.

# Any other number (full_like)
print(np.full_like(a, 4)) # ---> output : [[4 4 4 4 4 4 4]
#                                          [4 4 4 4 4 4 4]]

Copia matrice

a = [1,2,3]             # created an array a
b = [10,20,30]          # created an array b
print(a)                # output : [1 2 3]
a = b                   # I'll explain it below
b[1] = 200              # changed b's 2nd element's value to 200
print(a)                # output : [10 200 30] HOW??????

Qui, i valori di bnon sono stati copiati in a, invece ainiziano a indicare bche a sua volta cambia i valori di a ma il problema è che ogni volta che cambierai qualcosa nello bstesso si rifletterà su a.

Array di impilamento

Se vuoi impilare più array verticalmente o orizzontalmente, puoi usare rispettivamente vstack()method o hstack()method.

# Vertically stacking vectors
v1 = np.array([1,2,3,4])                # created array v1
v2 = np.array([5,6,7,8])                # create array v2

np.vstack([v1,v2,v1,v2])                # output : [[1 2 3 4]
                                        #           [5 6 7 8]
                                        #           [1 2 3 4]
                                        #           [5 6 7 8]]
print(np.hstack([v1,v2]))               # output : [1 2 3 4 5 6 7 8]

a = np.array([1, 2, 3])
print(a.sum())                               # sum of all values of a
print(a.max())                               # max of all elements of a
print(a.mean())                              # return mean of a
print(np.median(a))                          # return median of a
print(np.std(a))                             # return standard deviation of a

Questo conclude il nostro post sul blog cheat sheet intorpidito. Ci auguriamo che tu l'abbia trovato utile e che tu abbia imparato alcuni nuovi trucchi per lavorare con array e matrici in Python. Numpy è una libreria potente e versatile che può aiutarti a eseguire vari calcoli numerici e attività di analisi dei dati. Se vuoi saperne di più su numpy, puoi consultare la documentazione ufficiale o alcuni dei tutorial e corsi online disponibili. Grazie per aver letto e buona programmazione!