import numpy as np
import pandas as pd
ar = np.arange(5); print(ar);
# [0 1 2 3 4]
ar=np.arange(5); print(ar[::-1])
# [4 3 2 1 0]
ar = np.array([[2,3,4],[9,8,7],[11,12,13]]); print(ar)
# [[ 2 3 4]
# [ 9 8 7]
# [11 12 13]]
print(ar[1,1])
# 8
ar[1,1]=5; print(ar)
# [[ 2 3 4]
# [ 9 5 7]
# [11 12 13]]
print(ar[::2,::2])
# [[ 2 4]
# [11 13]]
print(ar[2])
# [11 12 13]
print(ar[2,:])
# [11 12 13]
print(ar[:,1])
# [ 3 5 12]
ar=2*np.arange(6); print(ar)
# [ 0 2 4 6 8 10]
ar[:3]=1; print(ar)
# [ 1 1 1 6 8 10]
ar[2:]=np.ones(4); print(ar)
# [1 1 1 1 1 1]
Fancy Indexing
rand = np.random.RandomState(42)
x = rand.randint(100, size=10)
print(x)
# [51 92 14 71 60 20 82 86 74 74]
print([x[3], x[7], x[2]])
# [71, 86, 14]
print(x[[3,7,2]])
# [71 86 14]
Access rows in 2d array
arr = np.empty((8, 4))
for i in range(8):
arr[i] = i
print(arr)
# [[0. 0. 0. 0.]
# [1. 1. 1. 1.]
# [2. 2. 2. 2.]
# [3. 3. 3. 3.]
# [4. 4. 4. 4.]
# [5. 5. 5. 5.]
# [6. 6. 6. 6.]
# [7. 7. 7. 7.]]
print(arr[[4, 3, 0, 6]])
# [[4. 4. 4. 4.]
# [3. 3. 3. 3.]
# [0. 0. 0. 0.]
# [6. 6. 6. 6.]]
Array masking
np.random.seed(45)
ar=np.random.randint(0,25,10); print(ar)
# [11 3 0 21 3 4 24 15 1 14]
evenMask=(ar%2==0); print(evenMask)
# [False False True False False True True False False True]
evenNums=ar[evenMask]; print(evenNums)
# [ 0 4 24 14]
ar=np.array(['Hungary','Nigeria',
'Guatemala','','Poland','','Japan']); print(ar)
# ['Hungary' 'Nigeria' 'Guatemala' '' 'Poland' '' 'Japan']
ar[ar=='']='USA'; print(ar)
# ['Hungary' 'Nigeria' 'Guatemala' 'USA' 'Poland' 'USA' 'Japan']
Copies and views
ar1=np.arange(12); print(ar1)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
ar2=ar1
ar2=ar1[::2]; print(ar1); print(ar2)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
# [ 0 2 4 6 8 10]
ar2[1]=-1; print(ar1); print(ar2)
# [ 0 1 -1 3 4 5 6 7 8 9 10 11]
# [ 0 -1 4 6 8 10]
print(ar2)
# [ 0 -1 4 6 8 10]
Use np.copy to force a copy
ar=np.arange(8); print(ar)
[0 1 2 3 4 5 6 7]
arc=ar[:3].copy(); print(arc)
# [0 1 2]
arc[0]=-1; print(arc)
# [-1 1 2]
print(ar)
# [0 1 2 3 4 5 6 7]