Scarica Informatica e funzioni numpy e insert e più Schemi e mappe concettuali in PDF di Informatica Giuridica solo su Docsity!
Laboratorio di
Programmazione e Sistemi
Multimediali
Scienze e Tecnologie Multimediali
Prof. Niki Martinel
Alcune slide di cortesia da
Dr. Saddi @ UniMi
NumPy
NumPy arrays (ndarray)
- Un array NumPy ( ndarray ) è una collezione omogenea N-dimensionale di «elementi» dello stesso «tipo»
- Il tipo può essere qualsiasi struttura arbitraria e viene specificato utilizzando il data-type
- La differenza principale principale rispetto alle liste standard consiste nel fatto che gli elementi di un array NumPy devono essere dello stesso tipo, solitamente float o int
- Un array può essere visto come una lista con le seguenti differenze:
- Tutti gli elementi devono essere dello stesso tipo
- Il numero di elementi deve essere noto a priori (cioè quando l'array viene creato) à non può essere cambiato dopo (dimensione statica)!
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities Niki Martinel
NumPy arrays (ndarray)
- Nell'intestazione abbiamo il parametro strides : un numero che indica di quanti byte (in ogni dimensione) bisogna spostarsi per leggere il contenuto dell’array
- Impostando questo attributo su un altro valore, cambierà il modo in cui viene vista la memoria
Niki Martinel
>>> a=np.arange(9) >>> a=a.reshape(3,3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> a.dtype dtype('int64') >>> a.strides (24, 8)
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
- Questa è una lista dei tipi di dati supportati per costruire un array NumPy Ndarray data types
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities Niki Martinel
Terminologia
- L'oggetto principale di NumPy è l'array multidimensionale omogeneo chiamato Ndarray
- Questo non è altro che una tabella di elementi (di solito numeri), tutti dello stesso tipo, indicizzati da una tupla di numeri interi positivi
- Esempi tipici di array multidimensionali includono vettori, matrici, immagini, suoni, etc.
- Le dimensioni sono chiamate axis , il numero di assi è il rank
Niki Martinel
>>> a = np.array([1,3,5,7,9])
>>> b = np.array([3,5,6,7,9])
>>> c = a + b
>>> print c
[4, 8, 11, 14, 18]
[7, 5, - 1] Un vettore/array rank 1 i.e. 1 axis con length 3 [ [ 1. 5 , 0. 2 , - 3. 7 ] , Un array rank 2 i.e. 2 axes , il primo con length 2 , [ 0. 1 , 1. 7 , 2. 9 ] ] il secondo con length 3 Ovvero.. una matrice con 2 righe e 3 colonne
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
Ndarray Attributes
- Lista degli attributi più importanti di un oggetto ndarray:
- ndarray.ndim
- Numero di axis (dimensioni) dell'array à il rank
- ndarray.shape
- Dimensioni dell'array
- Tupla di interi che indica la dimensione della matrice in ogni dimensione
- Per una matrice con n righe e m colonne, shape sarà (n,m) à la lunghezza della tupla è quindi il rank
- ndarray.size
- il numero totale di elementi della matrice, pari al prodotto degli elementi di shape
- ndarray.dtype
- Descrive il tipo degli elementi dell'array
- NumPy ne fornisce molti, per esempio: int8, int16, int32, int64, float16, float32, float
- ndarray.itemsize
- la dimensione in byte di ogni elemento dell'array
- Ad esempio, per elementi di tipo float64, itemsize è 8 (=64/8)
- ndarray.data
- il buffer che contiene gli elementi effettivi dell'array
- Normalmente, non avremo bisogno di usare questo attributo perché accederemo agli elementi di un array usando le strutture di indicizzazione
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities Niki Martinel
Creazione e uso di Ndarray
Niki Martinel
>>> a = np.array([0,1,2,3]) >>> a array([0, 1, 2, 3])
SIMPLE ARRAY CREATION
>>> type(a)
CHECKING THE TYPE
>>> a.dtype dtype(‘int32’)
NUMERIC ‘TYPE’ OF Elem.
>>> a.itemsize # per element 4
BYTES PER ELEMENT
shape returns a tuple
listing the length of the
array along each dimension.
>>> a.shape (4,) #1 row and 4 columns! >>> np.shape(a) (4,)
size reports the entire
number of elements in an
array.
>>> a.size 4 >>> np.size(a) 4
ARRAY SHAPE
ARRAY SIZE
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
- Come accedere e modificare elementi di un array NumPy: Valorizzare un Array
Niki Martinel
>>> a.dtype dtype('int32')
assigning a float to into
an int32 array will
truncate decimal part.
>>> a[0] = 10. >>> a [10, 1, 2, 3]
fill has the same behavior
>>> a.fill(-4.8) >>> a [-4, - 4, - 4, - 4]
BEWARE OF TYPE
COERSION
set all values in an array.
>>> a.fill(0) >>> a [0, 0, 0, 0]
This also works, but may
be slower.
>>> a[:] = 1 >>> a [1, 1, 1, 1]
FILL
>>> a[0] 0 >>> a[0] = 10 >>> a [10, 1, 2, 3]
ARRAY INDEXING
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
Esempio
- Esempio di creazione e utilizzo di ndarray tramite chiamate NumPy: modifica di un array
- Come creare un array con degli zeri?
Niki Martinel
>>> a[1, 2] = 7 >>> print(a) [[1 2 3] [3 6 7] [2 4 6]] >>> a[:, 0] = [0, 9, 8] >>> print(a) [[0 2 3] [9 6 7] [8 4 6]] >>> b = np.zeros(5) >>> print(b) [ 0. 0. 0. 0. 0.] >>> b.dtype dtype(‘float64’) >>> n = 1000 >>> my_int_array = np.zeros(n, dtype=np.int) >>> my_int_array.dtype dtype(‘int32’)
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
Esempio
- Esempio di creazione e utilizzo di ndarray tramite chiamate NumPy
- Come creare un array di uno e come usare la funzione arange
Niki Martinel
>>> c = np.ones(4) >>> print(c) [ 1. 1. 1. 1. ] >>> d = np.arange(5) # just like range() >>> print(d) [0 1 2 3 4] >>> d[1] = 9. >>> print(d) # arrays keep their type even if elements changed [0 9 2 3 4] >>> print(d*0.4) # operations create a new array, with new type [ 0. 3.6 0.8 1.2 1.6] >>> d = np.arange(5, dtype=np.float) >>> print(d) [ 0. 1. 2. 3. 4.] >>> np.arange(3, 7, 0.5) # arbitrary start, stop and step array([ 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. , 6.5])
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
- Altri metodi utili forniti dalla libreria NumPy: Operationi Con Gli Array…
Niki Martinel
returns the number of bytes
used by the data portion of
the array.
>>> a.nbytes 16
BYTES OF MEMORY USED
>>> a.ndim 1
NUMBER OF DIMENSIONS
create a copy of the array
>>> b = a.copy() >>> b array([0, 1, 2, 3])
ARRAY COPY
convert a numpy array to a
python list.
>>> a.tolist() [0, 1, 2, 3]
For 1D arrays, list also
works equivalently, but
is slower.
>>> list(a) [0, 1, 2, 3]
CONVERSION TO LIST
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
a = np.array([ 0, 1, 2, 3])
>>> a
array([ 0, 1, 2, 3])
( ) Fortran-order and C-order
- Un'istanza della classe ndarray consiste in un segmento contiguo di memoria monodimensionale, combinato con uno schema di indicizzazione che mappa gli interi nella posizione di un elemento nel segmento
- Un segmento di memoria è intrinsecamente 1-dimensionale
- diversi schemi per organizzare un array N-dimensionale in un blocco 1-dimensionale
- Due schemi principali: Fortran-order (column major) e C-order (row major)
- C e Fortran-order sono schemi di memoria contigui in cui ogni parte del blocco di memoria può essere raggiunta da qualche combinazione di indici
Niki Martinel
1 4 7 2 5 8 3 6 9 1 2 3 4 5 6 7 8 9 Fortran-order (Column major) C-order (Row major) strides=(8,24) strides=(24,8)
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities
- Esempio: creiamo un ndarray con alcuni elementi e un ordine specifico in memoria
- Controlliamo diverse proprietà dell'array nei due casi di ordinamento in memoria ( ) Fortran-order and C-order
Laboratorio di Programmazione e Sistemi Multimediali | Basic Funcionalities Niki Martinel