NumPy jest podstawowym pakiet (dodatkowym) w Pythonie do obliczeń naukowych. Integruje on niskopoziomowe biblioteki takie jak BLAS i LAPACK lub ATLAS. Podstawowe właściwości NumPy to :
NumPy is the fundamental package for scientific computing with Python. It contains among other things:
Besides its obvious scientific uses, NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.
In [2]:
import numpy as np
In [ ]:
In [3]:
np.random.seed(293423)
np.random.rand(5)
Out[3]:
In [3]:
np.random.rand(5)
Out[3]:
In [4]:
np.random.rand(2,3)
Out[4]:
In [9]:
np.random.rand(8).reshape((4,2))
Out[9]:
In [6]:
np.random.randint(5, 10)
Out[6]:
In [176]:
np.random.seed(100)
np.random.poisson(6.0)
Out[176]:
In [8]:
np.random.seed(100)
np.random.poisson([6.0, 1.0])
Out[8]:
In [9]:
np.random.normal(1.5, 4.)
Out[9]:
Continuous normal (Gaussian) distribution with mean micro=0.0 and standard deviation sigma=1.0:
In [10]:
np.random.normal()
Out[10]:
In [11]:
np.random.normal(size=5)
Out[11]:
In [12]:
arr = np.arange(10)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np.random.shuffle(arr)
In [13]:
arr
Out[13]:
Multi-dimensional arrays are only shuffled along the first axis:
In [10]:
arr = np.arange(9).reshape((3, 3))
arr
Out[10]:
In [11]:
np.random.shuffle(arr)
arr
Out[11]:
In [13]:
np.poly([-1, 1, 10])
Out[13]:
In [15]:
np.roots([1., -10., -1., 10.])
Out[15]:
In [18]:
np.polyval([1, -10, -1, 10], 10)
Out[18]:
In [19]:
np.polyder([1./4., 1./3., 1./2., 1., 0.])
Out[19]:
In [20]:
np.polyint([1, 1, 1, 1])
Out[20]:
In [21]:
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [0, 2, 1, 3, 7, 10, 11, 19]
np.polyfit(x, y, 2)
Out[21]:
In [22]:
np.polyadd([1, 2], [9, 5, 4])
Out[22]:
In [23]:
np.array([1, 2, 3])
Out[23]:
In [24]:
np.array([1, 4, 5, 8], float)
Out[24]:
From list of lists:
In [25]:
np.array([[1,2], [3,4]])
Out[25]:
In [26]:
np.arange(3)
Out[26]:
In [27]:
np.arange(3.)
Out[27]:
In [28]:
np.arange(3, 7)
Out[28]:
In [29]:
np.arange(3, 12, step=2)
Out[29]:
In [30]:
np.arange(start=3, stop=12, step=2, dtype=float)
Out[30]:
In [17]:
a = np.array([1, 4, 5, 8], float)
a
Out[17]:
In [32]:
a[:2]
Out[32]:
In [35]:
a = np.array([[1, 2, 3], [4, 5, 6]], float)
a
Out[35]:
In [33]:
a[3]
Out[33]:
In [34]:
a[0] = 5
a
Out[34]:
In [36]:
a[0][0]
a[0,0]
Out[36]:
In [37]:
a[0]
Out[37]:
In [38]:
a[1,:]
Out[38]:
In [39]:
a[-1,-2]
Out[39]:
In [40]:
a[-1,-2:]
Out[40]:
In [41]:
a[-1:,-2:]
Out[41]:
In [18]:
a = np.array([[1, 2, 3], [4, 5, 6]], float)
a
Out[18]:
In [43]:
len(a)
Out[43]:
In [44]:
a.shape
Out[44]:
In [19]:
a.dtype
Out[19]:
In [24]:
a.astype(int)
a.dtype
Out[24]:
In [23]:
a = a.astype(int)
a.dtype
Out[23]:
In [48]:
6 in a
Out[48]:
In [49]:
0 in a
Out[49]:
In [25]:
a = np.array(range(10), float)
In [26]:
a = a.reshape((5, 2))
a
Out[26]:
In [27]:
a.reshape((2, 5))
Out[27]:
In [28]:
a
Out[28]:
In [54]:
a = np.array([1, 2, 3], float)
In [55]:
b = a
c = a.copy()
In [56]:
a[0] = 0
In [57]:
b
Out[57]:
In [58]:
c
Out[58]:
In [59]:
a = np.array([[1, 2], [3, 4]], float)
a.tolist()
Out[59]:
In [60]:
list(a)
Out[60]:
In [61]:
a = np.array([1, 2, 3], float)
In [62]:
s = a.tostring()
s
Out[62]:
In [63]:
np.frombuffer(s)
Out[63]:
In [183]:
n1 = np.array([1,2,3])
n2 = np.array([[1,2],[3,4]])
print(f'Wymiar: n1: {n1.ndim}, n2: {n2.ndim}')
print(f'Kształt: n1: {n1.shape}, n2: {n2.shape}')
print(f'Rozmiar: n1: {n1.size}, n2: {n2.size}')
print(f'Typ: n1: {n1.dtype}, n2: {n2.dtype}')
print(f'Rozmiar elementu (w bajtach): n1: {n1.itemsize}, n2: {n2.itemsize}')
print(f'Wskaźnik do danych: n1: {n1.data}, n2: {n2.data}')
W przeciwieństwie do kolekcji, tablice mogą mieć tylko jeden typ elementu, choć może być złożony
https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
In [184]:
for v in [1, 1., 1j]:
a = np.array([v])
print('Tablica: {}, typ: {}'.format(a, a.dtype))
In [64]:
a = np.arange(3)
a
Out[64]:
In [65]:
a.fill(0)
a
Out[65]:
In [178]:
a = np.array(range(6), float).reshape((2, 3))
a
Out[178]:
In [179]:
a.transpose()
Out[179]:
In [180]:
a.T
Out[180]:
In [68]:
a = np.array([[1, 2, 3], [4, 5, 6]], float)
a
Out[68]:
In [69]:
a.flatten()
Out[69]:
In [70]:
a = np.array(range(6), float).reshape((2, 3, 1))
a
Out[70]:
In [71]:
a.squeeze()
Out[71]:
In [72]:
a = np.array([1,2,3], float)
b = np.array([5,2,6], float)
In [73]:
a + b
Out[73]:
In [74]:
a - b
Out[74]:
In [75]:
a * b
Out[75]:
In [76]:
b / a
Out[76]:
In [77]:
a % b
Out[77]:
In [78]:
b ** a
Out[78]:
In [79]:
a = np.array([[1,2], [3,4]], float)
b = np.array([[2,0], [1,3]], float)
In [80]:
a * b
Out[80]:
In [181]:
a = np.array([1,2], float)
b = np.array([3,4,5,6], float)
c = np.array([7,8,9], float)
np.concatenate((a, b, c))
Out[181]:
In [81]:
a = np.array([[1, 0], [0, 1]])
b = np.array([[4, 1], [2, 2]])
a @ b
Out[81]:
In [82]:
a = np.array([[1, 0], [0, 1]])
b = np.array([[4, 1], [2, 2]])
a * b
Out[82]:
In [31]:
a = np.array([[1, 2], [3, 4], [5, 6]], float)
a
Out[31]:
In [32]:
b = np.array([-1, 3], float)
b
Out[32]:
In [33]:
a + b
Out[33]:
In [34]:
a = np.zeros((2,2), float)
a
Out[34]:
In [35]:
b = np.array([-1., 3.], float)
b
Out[35]:
In [36]:
a + b
Out[36]:
In [38]:
a + b [np.newaxis, :]
Out[38]:
In [90]:
a + b [:, np.newaxis]
Out[90]:
In [91]:
a = np.array([1.1, 1.5, 1.9], float)
In [92]:
np.sqrt(a)
Out[92]:
In [93]:
np.floor(a)
Out[93]:
In [94]:
np.ceil(a)
Out[94]:
In [95]:
np.rint(a)
Out[95]:
In [96]:
np.pi
Out[96]:
In [97]:
np.e
Out[97]:
In [98]:
np.nan
Out[98]:
In [99]:
np.inf
Out[99]:
In [100]:
a = np.array([1, 4, 5], int)
for x in a:
print(x)
In [41]:
a = np.array([[1, 2], [3, 4], [5, 6]], float)
for x in a:
print(x)
In [102]:
a = np.array([2, 4, 3], float)
a
Out[102]:
In [103]:
a.sum()
Out[103]:
In [104]:
a.prod()
Out[104]:
In [105]:
a = np.array([2, 1, 9], float)
a
Out[105]:
In [106]:
a.mean()
Out[106]:
In [107]:
a.var()
Out[107]:
In [108]:
a.std()
Out[108]:
In [109]:
a.min()
Out[109]:
In [110]:
a.max()
Out[110]:
In [111]:
a.argmin()
Out[111]:
In [112]:
a.argmax()
Out[112]:
In [113]:
a = np.array([6, 2, 5, -1, 0], float)
sorted(a)
Out[113]:
In [114]:
a.sort()
a
Out[114]:
In [115]:
a = np.array([6, 2, 5, -1, 0], float)
a.clip(0, 5)
Out[115]:
In [116]:
a = np.array([1, 1, 4, 5, 5, 5, 7], float)
np.unique(a)
Out[116]:
In [117]:
a = np.array([[1, 2], [3, 4]], float)
a.diagonal()
Out[117]:
In [118]:
a = np.array([1, 3, 0], float)
b = np.array([0, 3, 2], float)
In [119]:
a > b
Out[119]:
In [120]:
a == b
Out[120]:
In [121]:
a <= b
Out[121]:
In [122]:
c = a > b
c
Out[122]:
In [123]:
any(c)
Out[123]:
In [124]:
all(c)
Out[124]:
In [44]:
a = np.array([1, 3, 0], float)
np.logical_and(a > 0, a < 3)
Out[44]:
In [126]:
a = np.array([True, False, True], bool)
np.logical_not(a)
Out[126]:
In [127]:
a = np.array([True, False, True], bool)
b = np.array([False, True, False], bool)
np.logical_or(a, b)
Out[127]:
In [45]:
a = np.array([1, 3, 0], float)
np.where(a != 0)
Out[45]:
In [129]:
b = np.array([1, 0, 3, 4, 0], float)
np.where(b != 0)
Out[129]:
In [130]:
a = np.array([1, 3, 0], float)
np.where(a != 0, a, None) # for element ``a != 0`` return such element, otherwise ``None``
Out[130]:
In [131]:
a = np.array([1, 3, 0], float)
np.where(a != 0, a ** 2, a)
Out[131]:
In [132]:
np.where(a != 0, a ** 2, 10)
Out[132]:
In [133]:
a = np.array([[0, 1], [3, 0]], float)
a.nonzero()
Out[133]:
In [134]:
a = np.array([1, np.NaN, np.Inf], float)
In [135]:
np.isnan(a)
Out[135]:
In [136]:
np.isfinite(a)
Out[136]:
In [46]:
a = np.array([[6, 4], [5, 9]], float)
a
Out[46]:
In [138]:
a >= 6
Out[138]:
In [139]:
a[a >= 6]
Out[139]:
In [140]:
a[np.logical_and(a > 5, a < 9)]
Out[140]:
In [47]:
a = np.array([2, 4, 6, 8], float)
b = np.array([0, 0, 1, 3, 2, 1], int)
a[b]
Out[47]:
In [142]:
a = np.array([2, 4, 6, 8], float)
a[[0, 0, 1, 3, 2, 1]]
Out[142]:
In [52]:
a = np.array([[1, 4], [9, 16]], float)
b = np.array([0, 0, 1, 1, 0], int)
c = np.array([0, 1, 1, 1, 1], int)
a[b,c]
Out[52]:
In [144]:
a = np.array([2, 4, 6, 8], float)
b = np.array([0, 0, 1, 3, 2, 1], int)
a.take(b)
Out[144]:
In [145]:
a = np.array([[0, 1], [2, 3]], float)
b = np.array([0, 0, 1], int)
a.take(b, axis=0)
Out[145]:
In [146]:
a.take(b, axis=1)
Out[146]:
In [147]:
a = np.array([0, 1, 2, 3, 4, 5], float)
b = np.array([9, 8, 7], float)
a.put([0, 3], b)
a
Out[147]:
In [148]:
a = np.array([0, 1, 2, 3, 4, 5], float)
a.put([0, 3], 5)
a
Out[148]:
In [149]:
a = np.array([1, 4, 3, 8, 9, 2, 3], float)
np.median(a)
Out[149]:
In [150]:
a = np.array([[1, 2, 1, 3], [5, 3, 1, 8]], float)
np.cov(a)
Out[150]:
In [151]:
np.cov(a, ddof=0)
Out[151]:
In [152]:
a = np.array([[1, 2, 1, 3], [5, 3, 1, 8]], float)
np.corrcoef(a)
Out[152]:
In [153]:
a = np.array([[0, 1], [2, 3]], float)
b = np.array([2, 3], float)
c = np.array([[1, 1], [4, 0]], float)
In [154]:
np.dot(b, a)
Out[154]:
In [155]:
np.dot(a, b)
Out[155]:
In [156]:
np.dot(a, c)
Out[156]:
In [157]:
np.dot(c, a)
Out[157]:
In [158]:
a = np.array([1, 4, 0], float)
b = np.array([2, 2, 1], float)
In [159]:
np.outer(a, b)
Out[159]:
In [160]:
np.inner(a, b)
Out[160]:
In [161]:
np.cross(a, b)
Out[161]:
In [162]:
a = np.array([[4, 2, 0], [9, 3, 7], [1, 2, 1]], float)
np.linalg.det(a)
Out[162]:
In [163]:
a = np.array([[4, 2, 0], [9, 3, 7], [1, 2, 1]], float)
vals, vecs = np.linalg.eig(a)
In [164]:
vals
Out[164]:
In [165]:
vecs
Out[165]:
In [166]:
a = np.array([[4, 2, 0], [9, 3, 7], [1, 2, 1]], float)
b = np.linalg.inv(a)
b
Out[166]:
In [167]:
np.dot(a, b)
Out[167]:
In [168]:
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
In [169]:
a * b
Out[169]:
In [170]:
a @ b
Out[170]:
In [171]:
a ** 2
Out[171]:
In [173]:
a * 2
Out[173]:
In [185]:
a = np.diag([3,4])
a
Out[185]:
In [187]:
a = np.matrix([[1,2], [3,4]])
print('det(a) = {}'.format(np.linalg.det(a)))
Function | Description |
---|---|
norm | Vector or matrix norm |
inv | Inverse of a square matrix |
solve | Solve a linear system of equations |
det | Determinant of a square matrix |
slogdet | Logarithm of the determinant of a square matrix |
lstsq | Solve linear least-squares problem |
pinv | Pseudo-inverse (Moore-Penrose) calculated using a singular value decomposition |
matrix_power | Integer power of a square matrix |
matrix_rank | Calculate matrix rank using an SVD-based method |
Function | Description |
---|---|
eig | Eigenvalues and vectors of a square matrix |
eigh | Eigenvalues and eigenvectors of a Hermitian matrix |
eigvals | Eigenvalues of a square matrix |
eigvalsh | Eigenvalues of a Hermitian matrix |
qr | QR decomposition of a matrix |
svd | Singular value decomposition of a matrix |
cholesky | Cholesky decomposition of a matrix |
Function | Description |
---|---|
tensorsolve | Solve a linear tensor equation |
tensorinv | Calculate an inverse of a tensor |
Function | Description |
---|---|
LinAlgError | Indicates a failed linear algebra operation |
numpy
oraz operatora @
oraz *
def matrix_multiplication(A, B):
"""
>>> import numpy as np
>>> A = np.array([[1, 0], [0, 1]])
>>> B = [[4, 1], [2, 2]]
>>> matrix_multiplication(A, B)
[[4, 1], [2, 2]]
>>> A = [[1,0,1,0], [0,1,1,0], [3,2,1,0], [4,1,2,0]]
>>> B = np.matrix([[4,1], [2,2], [5,1], [2,3]])
>>> matrix_multiplication(A, B)
[[9, 2], [7, 3], [21, 8], [28, 8]]
"""
pass
numpy-matrix-mul.py
numpy-sum.py
liczba_dziesiatek - liczba_jednosci = 6
liczba_dziesiatek + liczba_jednosci = 10
liczba_dziesiatek = liczba_jednosci + 6
liczba_dziesiatek + liczba_jednosci = 10
liczba_dziesiatek = liczba_jednosci + 6
(liczba_jednosci + 6) + liczba_jednosci 10
liczba_dziesiatek = liczba_jednosci + 6
2 * liczba_jednosci + 6 = 10
liczba_dziesiatek = liczba_jednosci + 6
liczba_jednosci = 8 / 2
liczba_dziesiatek = 2 + 6
liczba_jednosci = 2
liczba_dziesiatek = 8
liczba_jednosci = 2
x1 - x2 = 6
x1 + x2 = 10
x1 = 6 + x2
6 + x2 + x2 = 10
2 * x2 = 4
x2 = 2
x1 = 8
import numpy as np
A = np.matrix([[1, -1], [1, 1]])
# matrix([[ 1, -1],
# [ 1, 1]])
B = np.matrix([6, 10]).T # Transpose matrix
# matrix([[ 6],
# [10]])
x = A**(-1) * B
# matrix([[8.],
# [2.]])
A*x == B
# matrix([[ True],
# [ True]])
res1 = np.arange(1, 10)*100 + 10*x[0,0] + 1*x[1,0]
# array([182., 282., 382., 482., 582., 682., 782., 882., 982.])
res1[res1 % 3 == 0]
# array([282., 582., 882.])
m = res1 % 3 == 0
# array([False, True, False, False, True, False, False, True, False])
res1[m]
# array([282., 582., 882.])
res2 = res1[m]
# array([282., 582., 882.])
In [ ]: