2024-programowanie-w-python.../zajecia3/1.ipynb
2024-12-07 12:04:28 +01:00

45 KiB
Raw Blame History

import numpy as np

NumPy

wymiary

arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr)
[1 2 3 4 5 6 7]
type(arr)
numpy.ndarray
type(arr)
numpy.ndarray
np.array(123).shape
()
arr = np.array([[1, 2, 3], [4, 5, 6]])
arr.shape
(2, 3)
print(arr)
[[1 2 3]
 [4 5 6]]
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
arr.shape
(2, 2, 3)
print(arr)
[[[1 2 3]
  [4 5 6]]

 [[1 2 3]
  [4 5 6]]]

zadanie 1

  1. Utwórz jednowymiarową tablicę zawierającą liczby od 10 do 20 włącznie. Wyświetl:

    • Tablicę,
    • Jej kształt (shape),
    • Jej typ (type).
  2. Utwórz macierz 3x2 o elementach (10,20,30,40,50,60) i wyświetl:

    • Tablicę,
    • Jej kształt (shape),
    • Jej typ (type).

dostęp do elementów

arr = np.array([[1,2,3,4,5], [6,7,8,9,10]])
print(arr)
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
arr[1,2]
8
arr[1,-2]
9
arr[1,2:4]
array([8, 9])
arr[1,2:]
array([ 8,  9, 10])
arr[1,:]
array([ 6,  7,  8,  9, 10])
arr[0,:]
array([1, 2, 3, 4, 5])
arr[0,2:4]
array([3, 4])

zadanie 2

  1. Utwórz dwuwymiarową tablicę NumPy o wymiarach (3,3) zawierającą liczby od 1 do 9.
  2. Wykonaj następujące operacje na tablicy:
    • Wyświetl element znajdujący się w drugim wierszu
    • Wyświetl wszystkie elementy znajdujące się w drugim wierszu
    • Wyświetl wszystkie elementy znajdujące się w drugiej kolumnie
    • Wyświetl macierz, ale bez pierwszego wiersza i bez pierwszej kolumny

Typy danych

arr = np.array([1, 2, 3, 4])

print(arr.dtype)
int64
arr = np.array(['apple', 'banana', 'cherry'])

print(arr.dtype)
<U6
arr = np.array(['apple', 'banana', 'cherrycherry'])

print(arr.dtype)
<U12
arr = np.array(['apple', 'banana', 'cherry'], dtype='U30')

print(arr.dtype)
<U30
import numpy as np

# typ ASCII
arr = np.array([1, 2, 3, 4], dtype='S')
arr.dtype
dtype('S1')
arr = np.array([1, 2, 3, 4], dtype='i4')

print(arr)
print(arr.dtype)
[1 2 3 4]
int32
arr = np.array([1, 2, 3, 4], dtype='i2')

print(arr)
print(arr.dtype)
[1 2 3 4]
int16
arr = np.array([1, 2, 3, 4], dtype='i1')

print(arr)
print(arr.dtype)
[1 2 3 4]
int8
arr*1000000
array([1000000, 2000000, 3000000, 4000000], dtype=int32)
arr = np.array([1, 2, 3, 4])

print(arr)
print(arr.dtype)
[1 2 3 4]
int64
arr*1000000
array([1000000, 2000000, 3000000, 4000000])
arr = np.array([1.1, 2.2, 3.9])

print(arr)
print(arr.dtype)
[1.1 2.2 3.9]
float64
arr = arr.astype('i')
print(arr)
[1 2 3]
arr = np.array([1, 0, 3])

newarr = arr.astype(bool)

print(newarr)
print(newarr.dtype)
[ True False  True]
bool
arr = np.array([1, 0, 3.4])
arr
array([1. , 0. , 3.4])
arr.dtype
dtype('float64')
arr = np.array([1, 0, 3.4, 'x'])
arr
array(['1', '0', '3.4', 'x'], dtype='<U32')

Zadanie 3

Instrukcja:

  1. Utwórz tablicę NumPy zawierającą liczby całkowite od 10 do 40 z krokiem co 10. Wyświetl:

    • Tablicę,
    • Jej typ danych (dtype).
  2. Zmień typ danych tablicy z punktu 1 na float32. Wyświetl:

    • Zmienioną tablicę,
    • Jej nowy typ danych.
  3. Utwórz tablicę NumPy zawierającą ciągi znaków ("Python", "NumPy", "Coding"). Wyświetl:

    • Tablicę,
    • Jej typ danych.

Kopiowanie tablicy

arr = np.array([1, 2, 3, 4, 5])
x = arr
arr[0] = 42
arr
array([42,  2,  3,  4,  5])
x
array([42,  2,  3,  4,  5])
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
arr
array([42,  2,  3,  4,  5])
x
array([1, 2, 3, 4, 5])
import copy
arr = np.array([1, 2, 3, 4, 5])
x = copy.deepcopy(arr)
arr[0] = 42
arr
array([42,  2,  3,  4,  5])
x
array([1, 2, 3, 4, 5])
## Nowe
arr = np.array([1, 2, 3, 4])
arr
array([1, 2, 3, 4])
arr = np.array([1, 2, 3, 4], ndmin=2)
arr
array([[1, 2, 3, 4]])
arr[3]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[55], line 1
----> 1 arr[3]

IndexError: index 3 is out of bounds for axis 0 with size 1
arr.squeeze()
array([1, 2, 3, 4])
arr.squeeze()[3]
4
arr
array([[1, 2, 3, 4]])
arr = np.array([1, 2, 3, 4])
arr
array([1, 2, 3, 4])
np.expand_dims(arr, axis=0)
array([[1, 2, 3, 4]])
np.expand_dims(arr, axis=1)
array([[1],
       [2],
       [3],
       [4]])

Zadanie 4

Zadanie 4

  1. Utwórz tablicę NumPy zawierającą liczby [1, 2, 3, 4, 5]. Przypisz ją do zmiennej x i zmień pierwszy element tablicy na 50. Wyświetl:

    • Tablicę arr,
    • Tablicę x.
  2. Zrób kopię tablicy arr za pomocą metody .copy() i zmień pierwszy element tablicy arr na 50. Wyświetl:

    • Tablicę arr,
    • Tablicę x (po kopii).
  3. Zrób kopię tablicy arr przy użyciu modułu copy.deepcopy i zmień pierwszy element tablicy arr na 50. Wyświetl:

    • Tablicę arr,
    • Tablicę x (po głębokiej kopii).
  4. Utwórz tablicę NumPy o wymiarach (1,4) zawierającą elementy ( [1, 2, 3, 4, 5] ) i wykonaj następujące operacje:

    • Wyświetl tablicę.
    • Zmień tablicę, aby była jednowymiarowa za pomocą metody .squeeze()

Reshape jeszcze raze

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print(arr)
newarr = arr.reshape(4, 3)
print(newarr)
[ 1  2  3  4  5  6  7  8  9 10 11 12]
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
newarr = arr.reshape(4, 2)
print(newarr)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[65], line 1
----> 1 newarr = arr.reshape(4, 2)
      2 print(newarr)

ValueError: cannot reshape array of size 12 into shape (4,2)
newarr = arr.reshape(4, -1)
print(newarr)
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
newarr = arr.reshape(-1, 2)
print(newarr)
[[ 1  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]
 [ 9 10]
 [11 12]]

Zadanie 5

  1. Utwórz tablicę NumPy zawierającą liczby [1, 2, 3, ..., 10] o wymiarach (2,5). Wyświetl:

    • Tablicę (2,5)
  2. Zmień kształt tablicy na (5,2) za pomocą metody reshape. Wyświetl ją.

  3. Zmień kształt tablicy na (10,1) za pomocą metody reshape. Wyświetl ją

  4. Użyj wartości -1 w jednym z wymiarów w metodzie reshape, aby automatycznie dostosować pozostałe wymiary na (5,-1)

  5. Utwórz tablicę o wymiarach (5,1,2,1) na podstawie powyższego przykładu

Obliczenia wektorowe i macierzowe

x = np.array([1,2,4])
y = np.array([100,101,102])
x+y
array([101, 103, 106])
x+100
array([101, 102, 104])
x*100
array([100, 200, 400])
x = np.array([[1,2,4], [10,11,12]])
x
array([[ 1,  2,  4],
       [10, 11, 12]])

element-wise multiplication

x*100
array([[ 100,  200,  400],
       [1000, 1100, 1200]])
x
array([[ 1,  2,  4],
       [10, 11, 12]])
y
array([100, 101, 102])
x*x
array([[  1,   4,  16],
       [100, 121, 144]])
x*y
array([[ 100,  202,  408],
       [1000, 1111, 1224]])

mnożenie macierzy, iloczny skalarny

dot product- iloczyn skaralny dla wektorów mnożenie macierzowe - dla macierzy

y
array([100, 101, 102])
y.dot(y)
30605
y@y
30605
np.matmul(y,y)
30605
x
array([[ 1,  2,  4],
       [10, 11, 12]])
x.dot(x)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[84], line 1
----> 1 x.dot(x)

ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)
x.shape
(2, 3)
y.shape
(3,)
x.dot(y)
array([ 710, 3335])
x @ y
array([ 710, 3335])
np.matmul(x,y)
array([ 710, 3335])
x
array([[ 1,  2,  4],
       [10, 11, 12]])
x[:,1:]
array([[ 2,  4],
       [11, 12]])
np.matmul(x[:,1:] , x[:,1:])
array([[ 48,  56],
       [154, 188]])
x
array([[ 1,  2,  4],
       [10, 11, 12]])
x.T
array([[ 1, 10],
       [ 2, 11],
       [ 4, 12]])

Zadanie 6

  1. Utwórz dwie tablice jednowymiarowe x i y:

    • x zawiera liczby ( [3, 5, 7] ),
    • y zawiera liczby ( [50, 60, 70] ).
  2. Wykonaj następujące operacje i wyświetl wyniki:

    • Dodaj tablicę x i y.
    • Dodaj do każdego elementu tablicy x liczbę 10.
    • Pomnóż każdy element tablicy x przez 5.
  3. Utwórz dwuwymiarową tablicę z zawierającą: 3 5 7 ], [8,10,12], [10,10,10

    Następnie wykonaj następujące operacje:

    • Pomnóż macierzowo x i z
    • Oblicz iloczyn skalrny x i y
## Tworzenie macierzy zerowych, jednostkowych, itp
np.zeros((10,10))
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
np.ones((10,10))
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
np.ones((10,10)) * 123
array([[123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.],
       [123., 123., 123., 123., 123., 123., 123., 123., 123., 123.]])
np.eye(10)
array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])
#
arr = np.array([[1, 2, 3], [4, 5, 6]])

for x in arr:
  for y in x:
    print(y)
1
2
3
4
5
6
#
arr = np.array([[1, 2, 3], [4, 5, 6]])

for i in range(len(arr)):
  for j in range(len(arr[i])):
    print(arr[i,j])
1
2
3
4
5
6