User Tools

Site Tools


appunti3s:numpy

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
appunti3s:numpy [2020/07/08 23:58] profproappunti3s:numpy [2020/08/02 17:27] (current) profpro
Line 11: Line 11:
 <code> numpy.ndarray </code> <code> numpy.ndarray </code>
  
-noti anche con il termine "array" (cosa che potrebbe causare confusione se non si usasse il nome del modulo numpy come prefisso)+  *  **ndarray** = N-dimensional array, ndarray, sono noti anche con il termine "array"cosa che potrebbe causare confusione se non si usasse il nome del modulo (numpycome prefisso (numpy.array)
  
-Vediamo alcuni esempi per definire un array+==Vediamo alcuni esempi per definire un array==
  
-<code>+  *  dtype = data type 
 + 
 +<file python 1.py>
 import numpy as np import numpy as np
 a = [[ 1., 0., 0.], [ 0., 1., 2.]] a = [[ 1., 0., 0.], [ 0., 1., 2.]]
 b = np.array([1.2, 3.5, 5.1]) b = np.array([1.2, 3.5, 5.1])
-c = np.array( [ [1.0,2.0], [3.0,4.0] ], dtype=complex )+c = np.array( [ [1.0,2.0], [3.0,4.0] ], dtype=complex ) # oppure int32
 d = np.zeros((3, 4)) d = np.zeros((3, 4))
 e = np.ones((3, 4)) e = np.ones((3, 4))
 +del e    # libera la memoria
 +
 +
 +</file>
 +
 +  *  shape = definisce la forma (le dimensioni) dell'array, cioè la grandezza (size) di ogni asse
 +  *  nel precedente esempio 
 +    *  la variabile a, ha due assi, il primo ha lunghezza 3, il secondo ha lunghezza 2
 +    *  la variabile b ha due assi, il primo ha lunghezza 3, il secondo ha lunghezza 1, quindi si dice che ha un solo asse.
 +  * Per comprendere questo termine (numero di assi) basta immaginare che la variabile b possa essere usata per contenere i punti dell'asse x
 +
 +Questa istruzione preleva solo alcuni valori, tutti e tre della seconda colonna.
 +  c[0:2, 1]
 +  c[:,1]     # equivalente
 +
 +
 +(Per una matrice 2D, quando si richiama un elemento, è del tipo nome[riga,colonna])
 +
 +
 +==Iterazione==
 +
 +usando un indice si stampano intere righe alla volta
 +<code python>
 +  >>> for riga in c:
 +  ...     print(row)
  
 </code> </code>
 +
 +usando flat si stampano i singoli elementi
 +<code python>
 +  >>> for elemento in c.flat:
 +  ...     print(element)
 +</code>
 +
 +==Esempio in cui si vuole valutare una funzione==
 +
 +<file python 2.py>
 +from numpy import pi
 +x = np.linspace( 0, 2*pi, 100 )        # useful to evaluate function at lots of points
 +f = np.sin(x)
 +b = np.fromfunction(f,(100,0),dtype=int)
 +y,x = np.ogrid[ -1.4:1.4:h*1j, -2:0.8:w*1j ]
 +</file>
 +
 +====Esempio di operatori====
 +
 +== matrix product ==
 +
 +Scopriamo che è semplice fare le operazioni sui singoli elementi (potenze)
 +
 +<code python>
 +  >>> b = np.array([1.2, 3.5, 5.1])
 +  >>> b**2
 +  array([ 1.44, 12.25, 26.01])
 +</code>
 +
 +
 +==Prodotto vettoriale o cross product==
 +
 +Di solito si moltiplicano due array 1 D e si ottiene un terzo array 1 D, ortogonale.
 +
 +<code python>
 +  numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None)
 +</code>
 +
 +==Prodotto scalare o dot product==
 +
 +Ha un comportamento diverso, a seconda dei fattori utilizzati
 +
 +  * usando il tipo scalare 0 D, equivale a fare il prodotto con asterisco *
 +  * usando il tipo array 1 D, equivale a fare il prodotto scalare, o somma dei prodotti
 +  * usando il tipo array 2 D, .........
 +
 +<code>
 +   fare un esempio....
 +</code>
 +Quando gli array sono 2D è preferibile usare @
 +
 +<code python>
 +  >>> d @ e
 +</code>
 +
 +== operazioni scalari ==
 +
 +<code python>
 +  b.sum()         # somma tutti gli elementi
 +  b.sum(axis=0)   # somma in colonna
 +  b.sum(axis=1)   # somma in righe
 +</code>
 +
 +== Randomizzare == 
 +
 +Anche numpy ha il proprio generatore di numeri causali 
 +
 +<file python 4.py>
 +  import numpy.random as np_r
 +  rng = np_r.default_rng()
 +  vals = rng.standard_normal(10)
 +  more_vals = rng.standard_normal(10)
 +</file>
 +
 +==Copia e vista==
 +
 +Non esistono puntatori, ma si usano!
 +
 +<code python>
 +  >>> a = np.array([2,3,4])
 +  >>> b = a                # b punta ad a, esiste un solo array
 +  >>> b is a
 +  True
 +  >>> print(id(a))
 +  >>> print(id(b))
 +</code>
 +
 +<code python>
 +  >>> c=a.view() # le viste sono una copia, con id diverso
 +  >>> c = a[:, :] # COPIA cioe' crea una view!
 +</code>
 +
 +Modificando i dati di A, si modifica anche C!
 +Modificando i dati di C, si modifica anche A!
 +Modificando gli attributi (flag) di C NON si modificano i parametri di A!
 +
 +== Deep copy ==
 +
 +<code python>
 +  >>> d = a.copy()
 +  >>> e = a[:,9].copy() # copia parziale
 +</code>
 +
 +==Array di Indici di Array==
 +
 +<code python>
 +  >>> a = np.arange(12)**2                       # the first 12 square numbers
 +  >>> i = np.array([1, 1, 3, 8, 5])              # an array of indices
 +  >>> a[i]                                       # the elements of a at the positions i
 +  array([ 1,  1,  9, 64, 25])
 +
 +</code>
 +
 +
 +
 +
 +
 +
appunti3s/numpy.1594245514.txt.gz · Last modified: 2020/07/08 23:58 by profpro