<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 1.2 NumPy - Podstawy
Kilka przydatnych komend
Step1:  Zaskakujące może być działanie operatora *, który nie oblicza iloczynu macierzy. Odpowiada za to funkcja dot.
Step2:  Inne operacje dodawania i mnożenia
Step3:  Sklejanie tablic
Step4:  Typowe funkcje matematyczne
Step5:  Inne funkcje
Indeksy i zakresy
tablice jednowymiarowe zachowują sie podobnie do zwykłych list pythonowych.
Step6:  Wielowmiarowy tablice mają po jednym indeksie na wymiar
Step7:  Warunki
Step8:  Pętle i drukowanie
Step9:  Liczby losowe
<ASSISTANT_TASK:>
Python Code:
a = np.array([3,4,5])
b = np.ones(3)
a - b
Explanation: 1.2 NumPy - Podstawy
Kilka przydatnych komend:
| Komenda NumPy                     | Opis                                                        |
|-----------------------------------|-------------------------------------------------------------|
| a.ndim                            | zwraca liczbę wymiarów                              |
| a.shape                           | zwraca liczbę wierszy i kolumn                         |
| arange(start,stop,step)           | zwraca wektor sekwencji                                   |
| linspace(start,stop,steps)        | zwraca sekwencję o równych odstępach z określonego przedziału |
| dot(a,b)                          | mnożenie macierzy                                      |
| vstack([a,b])                     | pionowo skleja tablice a i b                              |
| hstack([a,b])                     | poziomo skleja tablice a i b                           |
| where(a>x)                        | zwraca elementy tablicy spełniające podany warunek       |
Podstawowe operacje arytmetyczne
Operatory arytmetyczne działają w NumPy element po elemencie.
End of explanation
a = np.array([[1,2],[3,4]])
b = np.array([[1,2],[3,4]])
a
b
a * b
np.dot(a,b)
Explanation: Zaskakujące może być działanie operatora *, który nie oblicza iloczynu macierzy. Odpowiada za to funkcja dot.
End of explanation
a = np.zeros((2,2),dtype='float')
a += 5
a
a *= 5
a
a + a
Explanation: Inne operacje dodawania i mnożenia
End of explanation
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
np.hstack([a,b,c])
np.vstack([a,b,c])
Explanation: Sklejanie tablic
End of explanation
x = np.arange(1,5)
np.sqrt(x) * np.pi 
2**4
np.power(2,4)
np.log(np.e)
x = np.arange(5)
x.max() - x.min()
Explanation: Typowe funkcje matematyczne
End of explanation
a = np.arange(10)
a[2:4]
a[:10:2]
a[::-1]
Explanation: Inne funkcje
Indeksy i zakresy
tablice jednowymiarowe zachowują sie podobnie do zwykłych list pythonowych.
End of explanation
x = np.arange(12).reshape(3,4)
x
x[2,3]
x[:,1]
x[1,:]
x[1:3,:]
Explanation: Wielowmiarowy tablice mają po jednym indeksie na wymiar
End of explanation
a = np.array([1,1,1,2,2,2,3,3,3])
a[a>1]
a[a==3]
np.where(a<3)
np.where(a<3)[0]
np.where(a>9)
Explanation: Warunki
End of explanation
for row in x:
    print row
for element in x.flat:
    print element 
Explanation: Pętle i drukowanie
End of explanation
np.random.randint(0,10,5) 
np.random.normal(0,1,5) 
np.random.uniform(0,2,5)
Explanation: Liczby losowe
End of explanation
<END_TASK>