import numpy as np
a = np.array([2, 5, -2, 4, -7, 8, 9, 11, -23, -4, -7, 16, 1])
1print("1:", a[5])
2print("2:", a[-2])
3print("3:", a[3:6])
4print("4:", a[:])
5print("5:", a[0:-1])
6print("6:", a[:5])
- 1
-
Dostęp do elementu o indeksie 5.
- 2
-
Dostęp do elementu drugiego od tyłu.
- 3
-
Dostęp do elementów o indeksach od 3 do 5 (włącznie) - zasada przedziałów lewostronnie domkniętych, prawostronnie otwartych.
- 4
-
Dostęp do wszystkich elementów.
- 5
-
Dostęp do wszystkich elementów z wyłączeniem ostatniego.
- 6
-
Dostęp od początku do elementu o indeksie 4.
1: 8
2: 16
3: [ 4 -7 8]
4: [ 2 5 -2 4 -7 8 9 11 -23 -4 -7 16 1]
5: [ 2 5 -2 4 -7 8 9 11 -23 -4 -7 16]
6: [ 2 5 -2 4 -7]
import numpy as np
1print("1:", a[4:])
2print("2:", a[4:-1])
3print("3:", a[4:10:2])
4print("4:", a[::-1])
5print("5:", a[::2])
6print("6:", a[::-2])
- 1
-
Dostęp do elementów od indeksu 4 do końca.
- 2
-
Dostęp do elementów od indeksu 4 do końca bez ostatniego.
- 3
-
Dostęp do elementów o indeksach stanowiących ciąg arytmetyczny od 4 do 10 (z czwórką, ale bez dziesiątki) z krokiem równym 2.
- 4
-
Dostęp do elementów od tyłu do początku.
- 5
-
Dostęp do elementów o indeksach parzystych od początku.
- 6
-
Dostęp do co drugiego elementu, licząc od końca (odwrócona kolejność).
1: [ -7 8 9 11 -23 -4 -7 16 1]
2: [ -7 8 9 11 -23 -4 -7 16]
3: [ -7 9 -23]
4: [ 1 16 -7 -4 -23 11 9 8 -7 4 -2 5 2]
5: [ 2 -2 -7 9 -23 -7 1]
6: [ 1 -7 -23 9 -7 -2 2]
import numpy as np
a = np.array([[3, 4, 5], [-3, 4, 8], [3, 2, 9]])
b = a[:2, 1:]
print(b)
print(np.shape(b))
c = a[1]
print(c)
print(np.shape(c))
d = a[1, :]
print(d)
print(np.shape(d))
[[4 5]
[4 8]]
(2, 2)
[-3 4 8]
(3,)
[-3 4 8]
(3,)
import numpy as np
a = np.array([[3, 4, 5], [-3, 4, 8], [3, 2, 9]])
e = a[1:2, :]
print(e)
print(np.shape(e))
f = a[:, :2]
print(f)
print(np.shape(f))
g = a[1, :2]
print(g)
print(np.shape(g))
h = a[1:2, :2]
print(h)
print(np.shape(h))
[[-3 4 8]]
(1, 3)
[[ 3 4]
[-3 4]
[ 3 2]]
(3, 2)
[-3 4]
(2,)
[[-3 4]]
(1, 2)
Uwaga - “krojenie” tworzy tzw. widok (view), a nie kopię. Zmiany w widoku wpływają na oryginalną tablicę i odwrotnie.
import numpy as np
a = np.array([[3, 4, 5], [-3, 4, 8], [3, 2, 9]])
b = a[1:2, 1:]
print(b)
a[1][1] = 9
print(a)
print(b)
b[0][0] = -11
print(a)
print(b)
[[4 8]]
[[ 3 4 5]
[-3 9 8]
[ 3 2 9]]
[[9 8]]
[[ 3 4 5]
[ -3 -11 8]
[ 3 2 9]]
[[-11 8]]
Rozwiązanie - użycie metody .copy():
import numpy as np
a = np.array([[3, 4, 5], [-3, 4, 8], [3, 2, 9]])
b = a[1:2, 1:].copy()
print(b)
a[1][1] = 9
print(a)
print(b)
b[0][0] = -11
print(a)
print(b)
[[4 8]]
[[ 3 4 5]
[-3 9 8]
[ 3 2 9]]
[[4 8]]
[[ 3 4 5]
[-3 9 8]
[ 3 2 9]]
[[-11 8]]
Indeksowanie fancy (tablicą indeksów) (fancy indexing)
import numpy as np
a = np.array([2, 5, -2, 4, -7, 8, 9, 11, -23, -4, -7, 8, 1])
b = a[np.array([1, 3, 7])]
print(b)
c = a[[1, 3, 7]]
print(c)
Indeksowanie logiczne (maski boolowskie)
import numpy as np
a = np.array([2, 5, -2, 4, -7, 8, 9, 11, -23, -4, -7, 8, 1])
b = a > 0
print(b)
c = a[a > 0]
print(c)
d = a[(a > 5) & (a%2 !=0)] # znak & odpowiada za AND
print(d)
e = a[(a > 5) | (a%2 !=0)] # znak | odpowiada za OR
print(e)
f = a[(a > 5) ^ (a%2 !=0)] # znak ^ odpowiada za XOR
print(f)
g = a[~(a > 0)]
print(g)
[ True True False True False True True True False False False True
True]
[ 2 5 4 8 9 11 8 1]
[ 9 11]
[ 5 -7 8 9 11 -23 -7 8 1]
[ 5 -7 8 -23 -7 8 1]
[ -2 -7 -23 -4 -7]
Uwaga - indeksowanie fancy i logiczne zwraca kopię, a nie widok (w przeciwieństwie do “krojenia”).
import numpy as np
a = np.array([2, 5, -2, 4, -7, 8, 9, 11, -23, -4, -7, 8, 1])
b = a[a > 0]
print(b)
b[0] = -5
print(a)
print(b)
a[1] = 20
print(a)
print(b)
[ 2 5 4 8 9 11 8 1]
[ 2 5 -2 4 -7 8 9 11 -23 -4 -7 8 1]
[-5 5 4 8 9 11 8 1]
[ 2 20 -2 4 -7 8 9 11 -23 -4 -7 8 1]
[-5 5 4 8 9 11 8 1]