Chapter 27 Numpy Library¶
Keynote¶
NumPy áááŻááŹáááąáŹáˇ Numerical Python áá˛áˇ áĄáááŻááąáŹááşááźá áşááźáŽá¸ áááášááśáá˛áˇ áĄááşááťááşááŽááŹáááŻááşá¸áááŻááşáᏠááźáżááŹáá˝áąááᯠááźáąáážááşá¸áá˛áˇááąááŹáážáŹ áá°ááŻáśá¸ááťáŹá¸áá˛áˇ Library áá áşááŻááźá áşááŤáááşá áá°á á á˝ááşá¸ááąáŹááşáááşááźááˇáşááŹá¸áá˛áˇ Multidimensional array object (áážáŻááąáŹááˇáşá áŻáś áááŹá¸áá˝ááş) áá˝áąáá˛áˇ áĄá˛áᎠarray áá˝áąáĄááąáŤáşáážáŹ ááźááşáááşáá˝ááşáááşá á˝áŹ áá˝ááşááťááşáááŻááşáááˇáş Method áá˝áąááᯠááśáˇáááŻá¸ááąá¸ááŹá¸ááŤáááşá ááŽáááŻááŻááşááąáŹááşáááŻááşáá˛áˇ ááŻááşáááşá¸á ááşáá˝áąáá˛áážáŹ áááşášááťáŹáááŻááşááŹá ááŻáášááááąá (Logic) áááŻááşá¸á ááŻáśááášááŹááş ááźáŻááźááşááźáąáŹááşá¸áá˛ááŹá áĄá áŽáĄá ááşááťááŹá áá˝áąá¸ááŻááşááŹá Input/Output ááá ášá áá˝áąáá˛áˇ á áŹáááşá¸áĄááşá¸ (Statistical) áááŻááşá¸áááŻááşáᏠáá˝ááşááťááşáážáŻáá˝áą á áááşááźááˇáş ááŤáááşááŤáááşá
27.1 Creation of Array¶
NumPy Library ááᯠáĄááŻáśá¸ááźáŻááťááşáááşáááŻáááşááąáŹáˇ áĄáąáŹááşáážáŹááźááŹá¸áá˛áˇáĄáááŻááşá¸ áĄáááşááŻáśá¸ download áá˝á˛ááźáŽá¸ install ááŻááşááŹá¸áááŻáˇ áááŻááŤáááşá
NumPy Array áá˝áąá ááŻáśá áśááźááˇáşáááŻááşáááş Python List áá˝áąáá˛áˇ áá°ááááŻáááŻáážáááąáááˇáşá ááááşáááşá¸ááťááąáŹáˇ List áá˝áąáááş áááŻááźáŽá¸ ááźááşááźááşáááşáááş áĄááŻááşááŻááşáááŻááşáĄáąáŹááş áááşááŽá¸ááŹá¸ááŹááźá áşááŤáááşá List áá˝áąáá˛áˇ ááá°áá˛áˇáĄááťááşáááąáŹáˇ NumPy array áá áşááŻáá˛áážáŹááŤáá˛áˇ element áá˝áąáĄáŹá¸ááŻáśá¸áᏠdata type áĄááťááŻá¸áĄá áŹá¸ áá°ááŽááąáááŻáˇ áááŻááŤáááşá NumPy array áá áşáᯠáááşááąáŹááşááťááşáááş np.array() function ááᯠááŻáśá¸ááážáŹááźá áşááźáŽá¸á áĄáąáŹááşááŤááá°ááŹáĄáááŻááşá¸ ááááşá¸ááááşá¸ list áá áşááŻááᯠáááˇáşááąá¸áááŤáááşá
import numpy as np
intarr = np.array([1,2,3,4]) # ááááşá¸ááźááˇáş (ints) array áá
áşáᯠáááşááąáŹááşááźááşá¸
floattarr = np.array([1.1,2.2,3.3,4.4]) # áááááááşá¸ (floats) array áá
áşáᯠáááşááąáŹááşááźááşá¸
ááááşáááŻáˇ ááááşá¸ááźááˇáş (ints) áá˝áąáá˛áˇ áááááááşá¸ (floats) áá˝áąááᯠááąáŹááąá¸áááŻááşáááşáááŻáááş NumPy á áĄáŹá¸ááŻáśá¸ááᯠfloats áĄááźá áş áĄáááŻáĄááťáąáŹááş ááźáąáŹááşá¸áá˛áááşáážááşáááŻááşáážáŹ ááźá áşááŤáááşá Array áááşááąáŹááşáá˛áˇáĄááťáááşáážáŹ element áá˝áąáá˛áˇ type ááᯠááŽá¸ááźáŹá¸ ááááşáážááşááąá¸ááŹá¸áá°á¸áááŻáááş NumPy á ááąá¸ááŹá¸áá˛áˇ áááşáááŻá¸áá˝áąáááŻááźááˇáşááźáŽá¸ type ááᯠáááˇáşáážááşá¸ááąá¸ááŤáááşá ááááşáááŻáˇ áááŻááşáááŻááş type áááşáážááşááťááşáááşáááŻáááşáááşá¸ áĄááŻááᯠáááşáážááşááąá¸áááŻáˇ áááŤáááşá
2D array (matrix) áááŻááŹá 1D array áá˝áąááᯠá áŻá ááşá¸ááŹá¸ááŹááźá áşááźáŽá¸á 3D array áááŻááŹáááąáŹáˇ 2D array áá˝áąááᯠáááşááźáŽá¸ á áŻá ááşá¸ááŹá¸áᏠááźá áşááŤáááşá áá°áááŻáˇááᯠáĄáąáŹááşááŤáĄáááŻááşá¸ áááşááąáŹááşáááŻááşááŤáááşá
a1 = np.array([[1,2,3],[4,5,6]]) # 2 rows x 3 columns áážááá˛áˇ array
a2 = np.array([[[1,2],[4,5]],[[6,7],[8,9]]]) # 2x2 áĄáá˝ááşáĄá
áŹá¸áážááá˛áˇ array á ááŻááŤáááşáá˛áˇ 3D array
Complex number (ááááşá¸ááąáŹ) áá˝áąááŤáááşáá˛áˇ array áá˝áąáááŻáááşá¸ áááşááąáŹááşáááŻááşááŤááąá¸áááşá
27.2 Creation of Filler Arrays¶
ááąáŹááşááž áááşáááŻá¸áĄá á áşáá˝áą áĄá áŹá¸áááŻá¸áááˇáşáááˇáş ááąááŹáŚá¸ááŹá¸áá˛áˇ (initial placeholder) áááşáááŻá¸áá˝áąááŤáá˛áˇ NumPy Array áá˝áąááᯠááźááŻáááşáááşááąáŹááşááŹá¸áááŻáˇ áááŤáááşá
áĽááᏠ- 0 áá˝áąááťááşá¸áá˛ááŤááŹá 1 áá˝áąááťááşá¸áá˛ááŤááŹá ááŤáážáááŻááş áááŻááşáááŻááťááşáá˛áˇ ááááşá¸ááąááťáŹáááşáážááşááźáŽá¸ ááźááˇáşááŹá¸áá˛áˇ array ááťááŻá¸áá˝áą áááşááŽá¸áááŻááşáááşá ááŹáááşáááŻá¸áážááşá¸ááááá˛áˇ (garbage values) áá˝áąááŤááąáá˛áˇ empty array ááťááŻá¸áááŻáááşá¸ áááşááŽá¸áááŻáˇáááŤáááşá
import numpy as np
a1 = np.empty((3,4)) # garbage values áá˝áąááŤáá˛áˇ 2D array áá
áşááŻ
a2 = np.zeros((3,4)) # ááŻá (0) áá˝áąááťááşá¸áá˛ááŤáá˛áˇ 2D array
a3 = np.ones((3,4)) # áá
áş (1) áá˝áąááťááşá¸áá˛ááŤáá˛áˇ 2D array
a4 = np.full((2,2),7) # áááşáááŻá¸áĄáŹá¸ááŻáśá¸ 7 ááźá
áşááąáá˛áˇ 2D array
áááááźáŻáááş - áᎠfunction áá˝áąáá˛ááᯠáááşáááŻá¸áááˇáşáá˛áˇáĄá፠Tuple ááŻáśá áśáá˛áˇ áááˇáşááąá¸áááŤáááşá (3,4) áááŻáˇ (2,2) áááŻáˇáááŻáᏠáááŻááşáááşááąáŹááşááťááşáá˛áˇ array áá˛áˇ ááŻáśááášááŹááş (Shape) ááᯠáá˝ážááşá¸áááŻáᏠááźá áşááŤáááşá Random áááşáááŻá¸áá˝áąáá˛áˇááźá áşááźá áşá áĄáá˝áŹáĄááąá¸ ááŽáá°ááŽááťážááźáŹá¸ááŹá¸áá˛áˇ áááşáááŻá¸áá˝áąáá˛áˇááźá áşááźá áş array áá˝áąááᯠáááşááąáŹááşáááŻááşááŤáááşá
import numpy as np
a1 = np.random.random((4)) # random áááşáááŻá¸ á ááŻááŤáá˛áˇ array
a2 = np.arange(5) # [0,1,2,3,4] ááᯠáááşááŽá¸ááąá¸áááş (áá°áááşá¸á
Ꮰtext áá˝ááş np.range ááŻááŤááąáŹáşáááşá¸ np.arange áᏠáĄáážááşááźá
áşáááş)
a3 = np.linspace(0,2,5) # [0.0 0.5 1.0 1.5 2.0] ááᯠáááşááŽá¸ááąá¸áááş
arange() áá˛áˇ linspace() áá˛áˇ ááá ááááşá¸ááááşá¸áážá áşááŻáśá¸ (parameters) á áĄá áááşáááŻá¸áá˛áˇ áĄááŻáśá¸áááşáááŻá¸ááᯠáá˝ážááşá¸ááŹááŤá áááá parameter áážáŹááťááąáŹáˇ arange() áĄáá˝ááşáááŻáááş áááşááąáŹááşá ᎠááźáŹá¸ááá˛áááŻáá˛áˇ step value ááźá áşááźáŽá¸á linspace() áĄáá˝ááşáááŻáááşááąáŹáˇ áááşáááŻá¸á áŻá áŻááąáŤááşá¸ áááşáážááŻáśá¸ áááŻááťááşááŹáᲠáááŻááŹááᯠáá˝ážááşá¸ááŹááźá áşááŤáááşá
NumPy áááą Identity Matrix áááŻáááşá¸ áááşááŽá¸áá˝ááˇáşááąá¸ááŹá¸ááŤáááşá Identity Matrix áááŻááŹá ááąáŹááˇáşááźááşááťááşá¸ (principal diagonal) ááąáŤáşáážáŹ 1 áá˝áąáážáááźáŽá¸ ááťááşáá˛áˇááąááŹáá˝áąáážáŹ 0 ááźá áşááąáá˛áˇ Matrix ááťááŻá¸ááŤá
Identity matrix áááŻáᏠáĄááŹá¸ááŽá ááŻáááşá¸ (Square) matrix ááźá áşáá˛áˇáĄáá˝ááş eye() áá˛áˇ identity() ááᯠááŻáśá¸áá˛áˇáĄá፠dimension áá áşááŻáᲠ(ááááşá¸áá áşááŻáśá¸áá˛) áááˇáşááąá¸áááŻáˇ áááŻááŤáááşá
27.3 Array Attributes¶
NumPy array áá˝áąáážáŹ áá°áˇáá˛áˇ element áĄááťááŻá¸áĄá áŹá¸ (type)á áĄáá˝ááşáĄá áŹá¸ (size)á ááŻáśááášááŹááş (shape) á ááŹáá˝áąááᯠááąáŹáşááźááąá¸áááŻááşáá˛áˇ attribute áá˝áą áĄááťáŹá¸ááźáŽá¸ ááŤáááşááŤáááşá
Array áá˛áážáŹ áᏠdata type áá˝áąááŤáá˛á size áááşááąáŹááşáážááá˛á memory áá˛áˇ áááşááąááŹáážáŹ ááááşá¸ááŹá¸áᲠáááŻááŹáá˝áąááᯠáĄáąáŹááşááŤáĄáááŻááşá¸ áážááşá¸ááźááˇáşáááŻáˇáááŤáááşá
import numpy as np
a1 = np.array([1,2,3,4])
a2 = np.array([1.1,2.2,3.3,4.4])
print(a1.dtype) # int32 áááŻáˇ áá˝ááşááŹáááş (Integer type áááŻáˇáááŻáˇááŤ)
print(a2.dtype) # float64 áááŻáˇ áá˝ááşááŹáááş (Float type áááŻáˇáááŻáˇááŤ)
print(a1.itemsize) # 4 áááŻáˇ ááźáááş (bytes)
print(a2.itemsize) # 8 áááŻáˇ ááźáááş (bytes)
print(a1.nbytes) # 16 (á
áŻá
áŻááąáŤááşá¸ bytes)
print(a2.nbytes) # 32 (áá°áááşá¸á
Ꮰtext áá˝ááş 16 ááŻááŤááąáŹáşáááşá¸ float64 áááş 8 bytes x 4 elements ááźá
áşá 32 bytes ááźá
áşáááˇáşáááş)
print(a1.data) # Memory address ááᯠááźááŤááááˇáşáááş (áĽááᏠ<memory at ...>)
print(a1.strides) # (4,) áááŻáˇ ááźáááş
print(a2.data) # Memory address ááᯠááźááŤááááˇáşáááş
print(a2.strides) # (8,) áááŻáˇ ááźáááş
- ááŽáážáŹáááŻáááş dtype á array áá˛áážáŹááŤáá˛áˇ element áĄááťááŻá¸áĄá áŹá¸ááᯠááźááąá¸ááŹááŤá Element áá áşááŻáśá¸ááťááşá¸á áŽá ááąááŹáááşááąáŹááşáá°áá˛áááŻááŹááᯠitemsize áá˛áˇ ááźááˇáşáááŻááşááźáŽá¸á Array áá áşááŻááŻáśá¸áĄááąáá˛áˇ ááąááŹáááşááąáŹááşáá°áᲠáááŻááŹáááŻááąáŹáˇ nbytes áá˛áˇ ááźááˇáşáááŻááşááŤáááşá
-
data áááŻááŹá memory ááąáŤáşáážáŹ array á áááşááááşá¸áááşá¸ááŹá¸áá˛áˇ ááááşá Ꮰ(Base Address) ááᯠááźááąá¸ááŹááźá áşááźáŽá¸á strides áááąáŹáˇ ááąáŹááşáááş element áá áşááŻáᎠááąáŹááşáááŻáˇáĄáá˝ááş base address áááą byte áááşááąáŹááş áááşááąáŤááşá¸áááˇáşáááᲠ(áááşááąáŹááş ááŻááşááťáąáŹáşáá˝áŹá¸áááá˛) áááŻááŹááᯠáá˝ážááşá¸ááŤáááşá
-
ndim, shape áá˛áˇ size attributes áá˝áąáááąáŹáˇ array áá˛áˇ dimension áĄááąáĄáá˝ááşá array áá˛áˇ ááŻáśááášááŹááşáá˛áˇ element á áŻá áŻááąáŤááşá¸ áĄááąáĄáá˝ááşáá˝áąááᯠáĄááŽá¸ááŽá¸ ááąáŹáşááźááąá¸ááŤáááşá
import numpy as np
a1 = np.array ([1,2,3,4])
a2 = np.array(([1,2,3,4],[5,6,7,8]))
print(a1.ndim) # 1 (1D array ááźá
áşáááŻáˇ)
print(a2.ndim) # 2 (2D array ááźá
áşáááŻáˇ)
print(a1.shape) # (4,) (Tuple ááŻáśá
áśáá˛áˇ ááźááŤáááş)
print(a2.shape) # (2,4) (2 rows áá˛áˇ 4 columns áážááááŻáˇááŤ)
print(a1.size) # 4 (element á ááŻáśá¸áážááááŻáˇ)
print(a2.size) # 8 (element á ááŻáśá¸áážááááŻáˇ)
27.4 Array Operations (Array áááŻááşáᏠááŻááşááąáŹááşááťááşááťáŹá¸)¶
NumPy Array áá˝áąááąáŤáşáážáŹ ááŻááşááąáŹááşááťááş (Operations) áá˝áą áĄááťáŹá¸ááźáŽá¸ ááŻááşáááŻáˇáááŤáááşá áᎠoperations áá˝áąá ááąá¸ááᏠááťá áşááťá áşááááŻá áĄááŻááşááŻááşááŹáááşá¸ áĄáááşá¸ááźááşááŤáááşá ááŹáááŻáˇ ááŽááąáŹááşááźááşáá˛áááŻááąáŹáˇ áᎠLibrary áá˛áážáŹ ááźááŻáááş compile ááŻááşááźáŽá¸ááŹá¸ ááŻááşáá˝áą (precompiled routines) ááŤááąáááŻáˇáᲠááźá áşááŤáááşá
Array operations áĄááťááŻá¸ááťááŻá¸áážááá˛áˇáĄáá˛áážáŹ áĄáąáŹááşááŤááąáŤááşá¸á ááşáá˝áą ááŤáááşááŤáááş -
- (a) Arithmetic Operations: áááşášááťáŹáááŻááşáᏠááąáŤááşá¸áážáŻááşááźážáąáŹááşá áŹá¸ ááŻááşááąáŹááşááťááşááťáŹá¸
- (b) Statistical Operations: á áŹáááşá¸áĄááşá¸áááŻááşá¸áááŻááşáᏠáá˝ááşááťááşáážáŻááťáŹá¸
- © Linear Algebra Operations: Linear Algebra (áááŻá¸ááźáąáŹááˇáş áĄáášáááŹáááşášááťáŹ) áááŻááşáᏠáá˝ááşááťááşáážáŻááťáŹá¸
- (d) Bitwise Operations: Bit áĄáááŻááş áááŻááşáá˝ááşáá˛áˇ ááŻááşááąáŹááşááťááşááťáŹá¸
- (e) Copying, Sorting: áá°á¸áá°ááźááşá¸ áá˛áˇ áĄá áŽáĄá ááşááťááźááşá¸ááťáŹá¸
- (f) Comparison Operations: áážááŻááşá¸áážááşááźááşá¸áááŻááşáᏠááŻááşááąáŹááşááťááşááťáŹá¸
27.4.1 Arithmetic Operations (áááşášááťáŹáááŻááşáᏠáá˝ááşááťááşáážáŻááťáŹá¸)¶
Array áážá áşááŻááźáŹá¸áážáŹ +, -, *, /, % á áá˛áˇ áááşášááťáŹ operator áá˝áąááᯠáĄááŻáśá¸ááźáŻááźáŽá¸ áá˝ááşááťááşáážáŻáá˝áą áĄááťáŹá¸ááźáŽá¸ ááŻááşáááŻáˇáááŤáááşá
áᎠoperator áá˝áąááᯠááŻáśá¸áááŻááşáá˛áˇáĄá፠Array áážá áşááŻáá˛áˇ áááşáááŻááşáᏠááąááŹáá° element áĄááťááşá¸ááťááşá¸ (corresponding elements) ááᯠáááŻááşáááŻááş áá˝ááşááťááşáá˝áŹá¸áážáŹ ááźá áşááŤáááşá
áááşášááąá (operator) áá˝áą áááŻáśá¸ááťááşáá°á¸áááŻáááş add(), subtract(), multiply(), divide(), áá˛áˇ remainder() áááŻáá˛áˇ function (method) áá˝áąááᯠááźáąáŹááşá¸ááŻáśá¸áááŻáˇáááşá¸ áááŤáááşá ááŽááᯠáá˝ááşááťááşááŹááťááŻá¸ááᯠVector operations áááŻáˇáááşá¸ ááąáŤáşááźááŤáááşá
import numpy as np
a1 = np.array([[10,2,3,4],[5,6,7,8]])
a2 = np.array([[1,1,1,1],[2,2,2,2]])
a3 = a1 + a2 # a3 = np.add(a1,a2) áá˛áˇ áĄáá°áá°ááŤáá˛
a4 = a1 - a2
a5 = a1 * a2
a6 = a1 / a2
a7 = a1 % a2
a8 = a1 ** 2 # Element áááŻááşá¸ááᯠáážá
áşáááşááááşá¸ áááşáááŻááşááŹááŤ
Array áá˛á element áá˝áąááᯠááááşá¸ááááşá¸áá áşááŻáááşá¸ (Scalar) áá˛áˇ ááąáŤááşá¸áážáŻááşááźážáąáŹááşá áŹá¸ ááŻááşááŹááťááŻá¸áááşá¸ ááŻááşáááŻáˇáááŤááąá¸áááşá (áĽááᏠ- Array áá áşááŻááŻáśá¸ááᯠ2 áá˛áˇ áááŻááşááąáŤááşá¸ááŹááťááŻá¸ááąáŤáˇ)
import numpy as np
a1 = np.array([[10,2,3,4],[5,6,7,8]])
a2 = a1 + 2 # Element áááŻááşá¸ááᯠ2 ááąáŤááşá¸áááˇáşáááŻááşááŹ
a3 = a1 ** 2 # Element áááŻááşá¸ááᯠ2 áááşááááşá¸ áááşáááŻááşááŹ
+=, -=, /= á áá˛áˇ In-place operator áá˝áąááᯠááŻáśá¸áááşáááŻáááşááąáŹáˇ Array áĄáá áşáá áşáᯠáááşáááąáŹááşááąáŹáˇáᲠáážáááźáŽá¸ááŹá¸ áááşáážá Array áááŻáᲠáááŻááşáááŻááş ááźááşáááş (Modify) áá˝áŹá¸áážáŹ ááźá áşááŤáááşá
a1 += a2 # a1 = a1 + a2 áá˛áˇ áĄáá°áá°ááŤáᲠ(a1 áá˛áˇ áááşáááŻá¸ááᯠáááŻááşáááŻááşááźáąáŹááşá¸áá˝áŹá¸ááŤáááş)
a3 += 5 # a3 = a3 + 5 áá˛áˇ áĄáá°áá°ááŤáá˛
Array element áá˝áąáĄááąáŤáşáážáŹ áááźáŹá¸ááŻááşááąáŹááşáááŻááşáá˛áˇ operation áá˝áąáááąáŹáˇ exp() (áááşááááşá¸áááşááźááşá¸)á sqrt() (áážá áşáááşááááşá¸áááşá¸áážáŹááźááşá¸)á cos(), sin() (ááźáŽáááŻáááŻááąááźáŽ áá˝ááşááťááşááźááşá¸) áá˛áˇ log() (Logarithm áá˝ááşááťááşááźááşá¸) á ááŹáá˝áąáᲠááźá áşááŤáááşá
27.4.2 Statistical Operations (á áŹáááşá¸áĄááşá¸áááŻááşáᏠáá˝ááşááťááşáážáŻááťáŹá¸)¶
NumPy á Array áá áşááŻááŻáśá¸áĄááąáŤáşáážáŹááźá áşááźá áşá áááŻááşáááŻááťááşáá˛áˇ Axis (Dimension) áá áşááŻááąáŤáşáážáŹ áá°áááşááźáŽá¸ááąáŹáˇááźá áşááźá áş á áŹáááşá¸áĄááşá¸áááŻááşáᏠáá˝ááşááťááşáážáŻáá˝áą (áĽááᏠ- ááąáŤááşá¸ááźááşá¸á áĄááźáŽá¸ááŻáśá¸áážáŹááźááşá¸) ááᯠááŻááşááąá¸áááŻááşááŤáááşá
Axis áááŻáᏠDimension (áĄáááŻááşá¸áĄááŹ) ááᯠááźáąáŹááŹááŤá ááŤááźáąáŹááˇáş 1D array áážáŹ 1 axis áážáááźáŽá¸á 2D array áážáŹ 2 axes áážááááşáááŻáˇ áážááşááŹá¸áááŻááşááŤáááşá
import numpy as np
a = np.array([[1,2,3,],[4,5,6]])
print(a.sum())
print(a.min()) # Array áá
áşááŻááŻáśá¸áá˛áˇ áĄáááşááŻáśá¸áááşáááŻá¸ááᯠáážáŹáááş
print(a.max(axis = 0)) # Column áá
áşááŻá
áŽáĄáááŻááş áĄááźáŽá¸ááŻáśá¸ááᯠáážáŹáááş
print(a.max(axis = 1)) # Row áá
áşááŻá
áŽáĄáááŻááş áĄááźáŽá¸ááŻáśá¸ááᯠáážáŹáááş
print(a.sum(axis = 1)) # Axis 1 (Row) áĄáááŻááşá¸ ááąáŤááşá¸áááş
print(a.cumsum(axis = 1)) # áááˇáşááąáŤááşá¸ (Cumulative sum) ááááşááᯠááŻááşááąá¸áááş
print(np.mean(a)) # ááťááşá¸ááťážáááşáááŻá¸ (Mean)
print(np.median(a)) # áĄáááşááááşá¸ (Median)
print(np.corrcoef(a)) # Correlation Coefficient (áááşáá˝ááşáážáŻ ááááşá¸áá˝ážááşá¸)
print(np.std(a)) # Standard Deviation (á
áśáá˝áąáááşááááşá¸)
- ááŽááąááŹáážáŹ max() ááᯠfunction áá˝áąááŻáśá¸áááş Axis áááşáážááşááŻáśááᯠáááąáŹááąáŤááşáááŻáˇ áĄááąá¸ááźáŽá¸ááŤáááşá ááťá˝ááşááąáŹáşáááŻáˇáá˛áˇ Array á 2 rows x 3 columns áážááá˛áˇ 2D array ááŤá
- axis = 0 áááŻáˇ ááźáąáŹáááŻááşáááş "Column áĄáááŻááşááźááˇáşáááş"á "Row áĄáááŻááşááźááˇáşáááş" áááŻááźáŽá¸ ááťááşáážááşááŹá¸ááŹáááş "Collapsing" (ááťáŻáśáˇáá áşáááŻááşááŹ/ááťáąáŹááşáááŻááşááŹ) áááŻáá˛áˇ áááąáŹáááŹá¸áá˛áˇ áážááşáᏠáááŻáážááşááŤáááşá
- áááŻáááŻááŹá axis = 0 ááŻáśá¸áááŻááşáááş NumPy á ááá Dimension (Size 2 áážááá˛áˇ Row áĄáááşáááŻááşáááąáŹáááŹá¸) ááᯠááťáŻáśáˇáá áşáááŻááşááŤáááşá ááŤááźáąáŹááˇáş ááááşá ááťááşáá˛áˇáá˛áˇ Size 3 áĄáááŻááşá¸ Element á ááŻáśá¸ááŤáá˛áˇ [4,5,6] áááŻááźáŽá¸ áá˝ááşááŹááŹááŤá
- ááŽáááąáŹáááŹá¸áĄáááŻááşá¸áᲠaxis = 1 ááŻáśá¸áááŻááşáááş ááŻááá Dimension (Size 3 áážááá˛áˇ Column ááąááźááşááŽáááąáŹáááŹá¸) ááᯠááťáŻáśáˇáá áşáááŻááşáá˛áˇáĄáá˝ááş [3,6] áááŻááźáŽá¸ áááŹááŹááźá áşááŤáááşá
27.4.3 Linear Algebra Operations¶
NumPy áážáŹ ááźážáąáŹááşáááşáážáŹáá˛áˇ Operation áážá áşááŻáá˛áˇ áá˝áŹááźáŹá¸ááťááşááᯠáááááŹá¸áážááşááŹá¸áááŻáˇ áááŻááŤáááşá* áááŻááŻáśá¸áááş ááąááŹáá°áá˛áˇ ááááşá¸ááááşá¸ááťááşá¸ (Element-wise) ááźážáąáŹááşááŹááźá áşááźáŽá¸á@ ááŤáážáááŻááş .dot() áááŻááŻáśá¸áážáᏠááááˇáş Matrix ááźážáąáŹááşááźááşá¸ (Matrix Multiplication) ááᯠááŻááşááąáŹááşáᏠááźá áşááŤáááşá
a3 = a1 * a2 # ááąááŹáá°áá˛áˇ element áĄááťááşá¸ááťááşá¸ ááźážáąáŹááşááźááşá¸ (Element-wise)
a3 = a1 @ a2 # Matrix ááźážáąáŹááşáááşá¸áĄáááŻááşá¸ ááźážáąáŹááşááźááşá¸ (Matrix multiplication)
a4 = a1.dot(a2) # ááŤááááşá¸ Matrix multiplication ááŤáá˛
Matrix áá áşááŻááᯠTranspose ááŻááşááťááşáááş (Row áá˛áˇ Column ááźáąáŹááşá¸ááźááşáážááşááťááşáááş) áááŻáááşáááşá¸ áĄáá˝ááşááá° ááŻááşáááŻáˇáááŤáááşá
Trace áááŻááŹá Matrix áá áşááŻáá˛áˇ ááąáŹááˇáşááźááşááťááşá¸ (Principal diagonal) ááąáŤáşáážáŹáážááá˛áˇ element áá˝áąááᯠááąáŤááşá¸ááźááşá¸ááźá áşááŤáááşá ááŤááᯠnp.trace() áá˛áˇ áážáŹáááŻááşááŤáááşá
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
s = np.trace(a) # 1 + 5 + 9 = 15 áááŻááźáŽá¸ áááŹááŤáááş
Inverse Matrix áááŻááŹá áá°áááşá¸ Matrix áá˛áˇ ááźááşááźážáąáŹááşáááŻááşáááş Identity Matrix áááŹáááˇáş Matrix áĄááťááŻá¸áĄá áŹá¸ááᯠááźáąáŹááŹááŤá NumPy áá˛áˇ linalg (Linear Algebra) module áĄáąáŹááşá inv() áááŻááŻáśá¸ááźáŽá¸ áážáŹáááŻááşááŤáááşá
Linear Simultaneous Equations (áá áşááźááŻááşáááşááŽááťážááźááşá¸) áá˝áąááᯠááźáąáážááşá¸áá˛áˇááąááŹáážáŹáááşá¸ NumPy ááᯠááŻáśá¸áááŻááşááŤáááşááĽááᏠ- $\(3x + y = 9\)$ $\(áá˛áˇ\)$ $\(x + 2y = 8\)$ áááŻáá˛áˇ ááŽááťážááźááşá¸áážá áşááźáąáŹááşá¸áá˛áˇ áĄááźáąááᯠáááŻááťááşáááş áĄááŻááᯠáá˝ááşáááŻááşááŤáááşá
a = np.array([[3,1],[1,2]]) # x áá˛áˇ y áá˛áˇ ááźážáąáŹááşááąáŹáşááááşá¸ (Coefficients) ááťáŹá¸
b = np.array([9,8]) # ááŽááťážááźááşá¸áá˛áˇ ááááşááťáŹá¸
x = np.linalg.solve(a,b) # áĄááźáąáážáŹááźááşá¸
print(x)
27.4.4 Bitwise Operations¶
Array áá˛áážáŹáážááá˛áˇ element áá áşááŻáśá¸ááťááşá¸á áŽáĄááąáŤáşáážáŹ Bitwise operations áá˝áąáááŻáááşá¸ áĄáąáŹááşááŤáĄáááŻááşá¸ áá˝ááşááťááşááŻááşááąáŹááşáááŻááşááŤááąá¸áááşá
import numpy as np
a1 = np.array([[10,2,3,4],[5,6,7,8]])
a2 = np.array([[1,1,1,1],[2,2,2,2]])
# Bitwise AND, OR, XOR áá˝ááşááťááşááźááşá¸ááťáŹá¸
a3 = np.bitwise_and(a1,a2)
a4 = np.bitwise_or(a1,a2)
a5 = np.bitwise_xor(a1,a2)
# Invert (NOT) ááŻááşááźááşá¸
a6 = np.invert(a1)
# Bit Shifting ááŻááşááźááşá¸
a7 = np.left_shift(a1,3) # element áá
áşááŻá
áŽááᯠáááşáááşáááŻáˇ 3 bits áá˝ážáąáˇááźááşá¸
a8 = np.right_shift(a1,2) # element áá
áşááŻá
áŽááᯠááŹáááşáááŻáˇ 2 bits áá˝ážáąáˇááźááşá¸
27.4.5 Copying and Sorting (áá°á¸áá°ááźááşá¸áážááˇáş áĄá áŽáĄá ááşááťááźááşá¸)¶
NumPy áážáŹ Copy áá°á¸áá˛áˇáááşá¸áááşá¸ (á) ááťááŻá¸ áážáááŤáááşá
-
No Copy: ááŻáśá¸á Copy ááá°á¸ááźááşá¸ (Reference áááąáŹááťááŻá¸)á
-
Shallow Copy (View): áĄááąáŤáşááś áĄáá˝áśáᲠáá°á¸áá°ááźááşá¸ (Data á áĄáá°áá°áá˛)á
-
Deep Copy: áĄáážá áşááŤáááťááş áá áşá áŻáśááŻáśá¸ áá˝áŹá¸áá°ááźááşá¸á
No Copy: Object áááŻááąáŹá Data áááŻááąáŹ áá°á¸áá°áᏠáááŻááşááŤáá°á¸á Array áážáááąáá˛áˇ ááááşá Ꮰ(Address) ááᯠVariable áĄáá áşáá áşááŻáá˛áˇ áážááşá¸áá˝ážááşá¸áááŻááşááŹááťááŻá¸áᲠááźá áşááŤáááşá
Shallow Copy (View): Array object áĄáá áşáá áşáᯠáááşááŽá¸áááŻááşááąáááˇáşá áĄáá˝ááşá¸á Data áá˝áąáááąáŹáˇ áá°áááşá¸ Array áá˛áˇ Data áá˝áąáááŻáᲠááťážááŻáśá¸ááąáᏠ(Point ááŻááşááąááŹ) ááźá áşááŤáááşá
Deep Copy: Array object áĄáá áşááąáŹá Data áĄáá áşááąáŹ ááŽá¸áááˇáşáá˝á˛ááŻááşááźáŽá¸ áĄááŻááş áá°á¸áá°áááŻááşáᏠááźá áşááŤáááşá
áĄáąáŹááşá፠Code áĽáááŹáážáŹ d áá˛áˇáááşáááşáá˛áˇ áĄáááŻááşá¸ ááťááşáá˛áˇáááŻáˇ ááťá˝ááşááąáŹáş ááźááˇáşá á˝ááşááźáŽá¸ áážááşá¸ááźááąá¸ááŹá¸ááŤáááşáááşááťáŹá
import numpy as np
a = np.array([[3,3,7],[1,5,2]])
# --- No Copy (Reference) ---
b = a # Copy áá°á¸ááŹáááŻááşááŤá ááŹáááşááąáŹááşáá
áşáᯠáááşáááŻááşááŹááŤ
print(b is a) # True (a áá˛áˇ b á áĄáá°áá°ááŤáá˛)
b[0][0] = 100 # b ááᯠááźááşáááŻááşáááş a á፠áááŻááşááźáąáŹááşá¸áá˝áŹá¸áááş
# --- Shallow Copy (View) ---
c = a.view() # View áĄááąáá˛áˇ áááşááŽá¸áááŻááşááŹááŤ
print(c is a) # False (Object ááťááşá¸ ááá°ááąáŹáˇááŤáá°á¸)
c[0][0] = 50 # ááŤááąáááˇáş c ááᯠááźááşáááş áá°áááşá¸ a áážáŹá፠áááŻááşááźáąáŹááşá¸áá˝áŹá¸ááŤááááˇáşáááş
# --- Deep Copy ---
d = a.copy() # (áá°áááşá¸á
áŹáážáŹ áᎠline ááťááşáá˛áˇáááŻáˇ ááźááˇáşááŹá¸ááŤáááş)
print(d is a) # False (ááŻáśá¸áááááŻááşáá˛áˇ Object áá˝áąááŤ)
d[0][0] = 150 # d ááᯠááźááşáááŻááşáááş áá°áááşá¸ a áážáŹ áááŻááşáááźáąáŹááşá¸ááąáŹáˇááŤáá°á¸
Sorting (áĄá
áŽáĄá
ááşááťááźááşá¸) áĄáá˝ááşáááşá¸ áĄáąáŹááşááŤáĄáááŻááşá¸ ááŻááşááąáŹááşáááŻááşááŤáááşá
a = np.array([[3,7,6],[1,5,2]])
b = np.array([[3,7,6],[1,5,2]])
a.sort() # Row áĄáááŻááş áááşá
ááşááźáŽá¸áááŻááş á
áŽááąá¸áá˝áŹá¸áááş
b.sort(axis = 0) # Column áĄáááŻááş (ááąáŤááşáááŻááş) áááşá
ááşááźáŽá¸áááŻááş á
áŽááąá¸áá˝áŹá¸áááş
27.4.6 Comparison (áážááŻááşá¸áážááşááźááşá¸ááťáŹá¸)¶
Array áá˝áąáážáŹ áážááşááźááˇáşá ááŹá áááŻááşá á áşá áᏠ(Comparison) ááŻáśá áś (á) ááťááŻá¸ áážáááŤáááşá
- One Value Comparison: Array áá˛á Element áĄáŹá¸ááŻáśá¸ááᯠáááşáááŻá¸áá áşááŻáááşá¸áá˛áˇ áááŻááşáážááşááźááˇáşááźáŽá¸ áááŹáá˛áˇ áĄááźáą (True/False) ááᯠArray ááźááşááŻááşááąá¸ááŹá
- Corresponding Elements Comparison: Array áážá áşááŻáážáŹáážááá˛áˇ ááąááŹáá° Element áĄááťááşá¸ááťááşá¸ áááŻááşáážááşááźááˇáşááźáŽá¸ Boolean Array ááźááşááŻááşááąá¸ááŹá
- Full Array Comparison: Array áážá áşááŻáá˛áˇ ááŻáśááášááŹááş (Shape) ááąáŹá ááŤáááşáá˛áˇ Element áá˝áąááąáŹ áááşáá°ááŽááᎠá á áşááąá¸áᏠ(áá°áááş True, ááá°áááş False ááźááŤáááş)á
(1) Array Element áĄáŹá¸ááŻáśá¸ááᯠáááşáááŻá¸áá áşááŻáá˛áˇ áááŻááşáážááşááźááşá¸
import numpy as np
a = np.array([[3,7,6],[1,5,2]])
print(a < 5) # 5 áááşáááşááŹá¸ áááŻááşá
á
áşááŹááŤ
# áĄááźáąá [[True False False] [True False True]] áááŻááźáŽá¸ áá˝ááşááŤáááş
(2) Array áážá áşááŻá ááąááŹáá° Element áĄááťááşá¸ááťááşá¸ áážááşááźááşá¸
import numpy as np
a = np.array([[3,7,6],[1,5,2]])
b = np.array([[3,1,2],[1,7,2]])
print(a < b) # a á b áááş áááşáááŹá¸ ááąááŹáá°ááťááşá¸ áááŻááşá
á
áşááŹááŤ
# áĄááźáąá [[False False False] [False True False]] áááŻááźáŽá¸ áá˝ááşááŤáááş
(3) Array áážá áşááŻááŻáśá¸ áááşáá°ááŽááᎠáážááşááźááşá¸
import numpy as np
a = np.array([[3,7,6],[1,5,2]])
b = np.array([[3,7,6],[1,5,2]])
c = np.array([[3,7],[6,1],[5,2]])
print(np.array_equal(a,b)) # True (Shape ááąáŹ Element áá˝áąááąáŹ áá˝ááşáááá°áááŻáˇááŤ)
print(np.array_equal(a,c)) # False (Shape ááá°ááąáŹáˇáááŻáˇááŤ)
27.4.7 Indexing and Slicing (Array áááşá¸ááťáŹá¸ áá˝ážááşá¸áááŻááźááşá¸áážááˇáş áĄáááŻááşá¸ááźááşááźááşá¸)¶
Python List áá˝áąáááŻááŤáá˛á NumPy Array áá˝áąááááşá¸ 0 áááąá ááźáŽá¸ ááąáá˝ááş (Indexing ááŻááş) ááŤáááşá áĄááąáŹááşááŻáśá¸áááą ááźááşááąááťááşáááş áĄááŻááşááášááᏠ(Negative index) ááŻáśá¸áááŻáˇáááŤáááşá
a = np.array([3,7,6,1,5,2])
print(a[0], a[-1]) # 3 áá˛áˇ 2 ááᯠááŻááşááąá¸ááŤááááˇáşáááş (áážáąáˇááŻáśá¸áá˛áˇ ááąáŹááşááŻáśá¸)
Dimension áá áşááŻáááşáááŻáá˛áˇ Array (Multi-dimensional array) áá˝áąáážáŹ áĄáááşá¸áá áşáááşá¸ááťááşá¸á áŽááᯠáážááşá¸áá°ááťááşáááş Index ááśááŤááşáá áşááŻáá ááŻáśá¸áááŤáááşá
a = np.array([[3,7,6],[1,5,9]])
print(a[1][2]) # 9 ááᯠááŻááşááąá¸ááŤááááˇáşáááş
# (a[1] á ááŻáááááźáąáŹááş Row [1,5,9] ááźá
áşááźáŽá¸á áĄá˛áˇááŽáá˛á index 2 ááźá
áşáá˛áˇ 9 ááᯠáá°áááŻááşááŹááŤ)
áááááźáŻáááş - a[1][2] áááŻáˇááąá¸ááŹá áá˝ááşááťá°ááŹáĄááŻááşááŻááşááŻáśáĄá áááşá¸áááşá¸áá˝áŹááźáŹá¸ááŤáááşá áá°á ááá a[1] áĄáááŻááşá¸ááᯠáĄáááşáá˝á˛ááŻááşááźáŽá¸ ááŹáᎠarray (temporary array) áá áşááŻáĄáááşááąáŹááşáááŻááşáááşá ááźáŽá¸ááž áĄá˛áˇááŽáĄáá˛á index 2 ááᯠáááşáá˝á˛ááŻááşáᏠááźá áşááŤáááşá (NumPy áážáŹ áááŻááźááşááťááşáááş a[1, 2] áááŻáˇááąá¸ááŹá áááŻááąáŹááşá¸ááŤáááş)á
Slicing (áĄáááŻááşá¸ááźááşááŹ) ááááşá¸ List áá˝áąáĄáááŻááşá¸ááŤáá˛á áá°á¸ááźáŹá¸ááŹá Dimension áá˝áąáĄááťáŹá¸ááźáŽá¸áážáŹ ááąáŹáşáᏠ(comma) ááśááźáŽá¸ áááźááŻááşáááş ááźááşáááŻáˇáááŹááŤáá˛á
import numpy as np
a = np.array([8,2,4,1,5,9])
# b áážáŹ áá°áááşá¸á
áŹááŹá¸áĄá Row 3 ááźáąáŹááşá¸áážááááşáááŻáˇ áá°ááááŤáááş (áážááşá¸áááşá¸ááťááşáĄá)
b = np.array([[3,7,6,9,8], [1,5,9,2,4], [0,0,3,1,5]])
print(a[2:5]) # [4 1 5] (Index 2 áááą 5 ááááŻááşáááşáá)
print(a[:-4]) # [8 2] (áĄá
áááą ááąáŹááşááŻáśá¸ 4 ááŻáśá¸ááááŻááşáááşáá)
# 2D Slicing (Comma ááŻáśá¸ááŹá¸ááŻáśááᯠáááááźáŻááŤ)
print(b[1:3, 2:4])
# Row 1 áááą 3 ááááŻááşáááşáá (Row 1, 2) áá°áááşá
# Column 2 áááą 4 ááááŻááşáááşáá (Col 2, 3) áá°áááşá
# ááááşá [[9 2], [3 1]] áááŻááźáŽá¸ áá˝ááşááŤáááşá
áĄááąá¸ááźáŽá¸áá˛áˇ áĄááťááş (Common Mistake)
-
b[1:3][2:4] áááŻáˇááąá¸ááŹáá˛áˇ b[1:3, 2:4] áááŻáˇááąá¸áᏠááá°ááŤáá°á¸á
-
b[1:3][2:4] áááŻáˇááąá¸áááŻááşáááş ááá b[1:3] áĄá Row 1 áá˛áˇ 2 ááŤáá˛áˇ Array áĄáá áşáá áşáᯠáá˝ááşááŹáááşá ááźáŽá¸ááąáŹáˇááž áĄá˛áˇáᎠArray áĄáá áşáá˛áˇ Row 2 áááą 4 ááᯠáááşááźááşáááŻáˇ ááźááŻá¸á áŹá¸ááŤááááˇáşáááşá Array áĄáá áşáážáŹá Row 2 row áá˛áážáááąáŹáˇ [2:4] áááŻáá˛áˇ row áá˝áą ááážáááąáŹáˇááŤáá°á¸á ááŤááźáąáŹááˇáş áĄááźáąá Empty Array [ ] (áĄáá˝ááş) áá˝ááşááŹáᏠááźá áşááŤáááşá
27.5 Array Manipulation (Array ááťáŹá¸ááᯠááŻáśá áśááźáąáŹááşá¸áᲠáááŻááşáá˝ááşááźááşá¸)¶
Reshaping (ááŻáśááášááŹááş ááźáąáŹááşá¸áá˛ááźááşá¸) Array áá áşááŻááᯠáááşááąáŹááşááźáŽá¸ááźáŽáááŻáááş reshape() method áááŻááŻáśá¸ááźáŽá¸ áá°áˇáá˛áˇ ááŻáśááášááŹááş (Shape) ááᯠááźáąáŹááşá¸áá˛áááŻááşááŤáááşá áᎠMethod á Data áá˝áąááᯠááááááŻááşá áąáᲠShape áĄáá áşáá˛áˇ Array áá áşááŻááᯠááźááşááŻááşááąá¸ááŹááŤá
(áážááşááťááş - áá°áááşá¸á áŹááŹá¸á፠Code áá˝ááş Element áĄááąáĄáá˝ááş áá˝á˛áá˝á˛áážáŻáážáááąáááźááˇáş áá˝ááşááťááşáááĄáąáŹááş áĄáááşá¸áááş ááźááşáááşáážááşá¸ááźááąá¸ááŹá¸ááŤáááş)
import numpy as np
# Element áá ááŻáśá¸ááŤáá˛áˇ Array áá
áşáᯠ(3 rows x 4 columns)
a = np.array([[3,7,6,9],[1,5,2,4],[0,3,1,5]])
# 2 rows x 6 columns ááŻáśá
áś ááźáąáŹááşá¸áááş
b = a.reshape(2,6)
print(b)
# ááááş: [[3 7 6 9 1 5] [2 4 0 3 1 5]]
# Row 4 ááźáąáŹááşá¸áááŻááťááşáááşá Column áááŻááąáŹáˇ Auto áá˝ááşáááˇáşá
áąááťááşáááş '-1' ááŻáśá¸ááááş
c = a.reshape(4,-1)
print(c)
# ááááş: [[3 7 6] [9 1 5] [2 4 0] [3 1 5]] (4 rows x 3 columns ááźá
áşáá˝áŹá¸áááş)
# 0-11 áĄáá ááááşá¸áá˝áąáááŻááŻááşááźáŽá¸ áááşá¸ááźáŽá¸ reshape ááŻááşááźááşá¸
d = np.arange(12).reshape(2,6)
print(d)
# ááááş: [[0 1 2 3 4 5] [6 7 8 9 10 11]]
Flattening (ááźáŹá¸ááťááźááşá¸) Multi-dimensional array (áĄáááşáááşááŤáá˛áˇ array) áá áşááŻááᯠravel() ááŻáśá¸ááźáŽá¸ 1D array (áááşá¸áá áşáááşá¸áááşá¸ááźá áşáá˝áŹá¸áĄáąáŹááş) ááźáŹá¸ááťáááŻááşáááŻáˇ áááŤáááşá
import numpy as np
a = np.array([[3, 7, 6, 9],[1, 5, 2, 4],[0, 3, 1, 5]])
b = a.ravel()
print(b)
# ááááş: [3 7 6 9 1 5 2 4 0 3 1 5] áááŻááźáŽá¸ áá
áşáááşá¸áááşá¸ áá˝ááşááŹáááş
Appending (áááşááźááˇáşááźááşá¸) áážáááźáŽá¸ááŹá¸ Array áá áşááŻáá˛áˇ áĄááąáŹááşáážáŹ ááąáŹááşáááş áááşáááŻá¸áá˝áą áááşááźááˇáşááťááşáááş np.append() ááᯠááŻáśá¸áááŻááşááŤáááşá
import numpy as np
a = np.array([[3, 7, 6, 9],[1, 5, 2, 4]])
b = np.array([[0, 3, 1, 5],[1, 1, 1, 1]])
# Axis 0 (Row áĄáááŻááş/áĄáąáŹááşáááşáááŻáˇ) áááşáááş
c = np.append(a, b, axis=0)
# ááááş: Row á ááźáąáŹááşá¸ ááźá
áşááŹáááş
# Axis 1 (Column áĄáááŻááş/ááąá¸áááşáááŻáˇ) áááşáááş
d = np.append(a, b, axis=1)
# ááááş: Row 2 ááźáąáŹááşá¸áᲠáážááááşá ááŤááąáááˇáş Column áá˝áą ááťáŹá¸áá˝áŹá¸áááş
áááááźáŻáááş -
append ááŻááşáááŻááşáááş áá°áááşá¸ Array ááᯠáá˝áŹá¸ááźááşááŹáááŻááşáá˛á áááşáááŻá¸áá áşáá˝áąááŤáááşáá˛áˇ Array áĄáá áşáá áşáᯠ(Copy) ááᯠááŻááşááąá¸áᏠááźá áşááŤáááşá áááşááźááˇáşáááˇáş Array áᏠáá°áááşá¸ Array áá˛áˇ Shape áá°ááŽáááŻáˇ áááŻááŤáááşá ááááşáááŻáˇ axis ááááşáážááşááŹá¸áá°á¸áááŻáááş Array áá˝áąááᯠáĄáááşááŻáśá¸ ááźáŹá¸ááť (Flatten) áááŻááşááźáŽá¸ááž áááşááąá¸áá˝áŹá¸áážáŹ ááźá áşááŤáááşá ááŤáˇáĄááźááş Array áá˝áąáá˛áážáŹ Element ááźáŹá¸ááźááşáááˇáşáᏠ(Insert)á ááťááşáᏠ(Delete) áá˛áˇ áá˝á˛ááŻááşáᏠ(Split) ááŻááşáá˛áˇ Function áá˝áąáááşá¸ áážáááŤááąá¸áááşá ááŤáá˝áąáááŻááąáŹáˇ áááŻááˇáşááŹáᏠáááşáááşááąáˇááŹááźááˇáşáááŻáˇ áĄááźáśááźáŻááŹá¸ááŤáááşá
Problems¶
Problem 27.1¶
Dimension 4 x 2 x 3 áážááá˛áˇ 3D Array áá áşááŻááᯠáááşááąáŹááşáá˛áˇ Program ááąá¸ááŤá Array áá˛áážáŹ áááşáááŻá¸áááťááŻáˇááᯠáááŚá¸áááşáážááş (Initialize) ááŤá ááźáŽá¸ááąáŹááş Axis áá áşááŻá áŽáĄáááŻááş áĄááźáŽá¸ááŻáśá¸áááşáááŻá¸ (Maximum) áá˝áąááᯠáážáŹáá˝áąááŤá
Program
import numpy as np
# 4x2x3 Array áá
áşáᯠáááşááąáŹááşááźááşá¸
a = np.array([[[3,7,6],[1,5,2]],[[1,2,4],[7,2,9]],[[1,0,0],[5,4,3]],[[8,1,4],[2,7,8]]])
print('Maximum along axis 0')
print(np.max(a,axis = 0))
print('Maximum along axis 1')
print(np.max(a,axis = 1))
print('Maximum along axis 2')
print(np.max(a,axis = 2))
Output
Problem 27.2¶
á ááž áá áá ááááşá¸ááťáŹá¸ááŤáááşááźáŽá¸ Shape 5 x 4 áážáááąáŹ Array áá áşááŻááᯠáááşááąáŹááşááŤá Array áá áşááŻááŻáśá¸áá˛áˇ ááąáŤááşá¸áááşá Row áĄáááŻááş ááąáŤááşá¸áááşááťáŹá¸ áážááˇáş Column áĄáááŻááş ááąáŤááşá¸áááşááťáŹá¸ááᯠáážáŹáá˝áąáááˇáş Program ááąá¸ááŤá
Program
import numpy as np
a = np.arange(20).reshape((5,4))
print(a)
print(np.sum(a)) # Array áá
áşááŻááŻáśá¸ááąáŤááşá¸áááş
print(np.sum(a, axis = 0)) # Column áĄáááŻááşááąáŤááşá¸áááş
print(np.sum(a, axis = 1)) # Row áĄáááŻááşááąáŤááşá¸áááş
Output
Problem 27.3¶
áĄáąáŹááşááŤááŻááşááąáŹááşááťááşááťáŹá¸ ááážááááş Program ááąá¸ááŤ
- Size 10 áážáááźáŽá¸ Element áĄáŹá¸ááŻáśá¸ áááşáááŻá¸ 3 áááşáážááşááŹá¸áá˛áˇ Array a ááᯠáááşááąáŹááşááŤá
- Array a áá˛áˇ Memory Size áá˛áˇ Element áá áşááŻááťááşá¸á áŽáá˛áˇ Size ááᯠáážáŹááŤá
- 0 ááž 90 áĄáá áááşáááŻá¸ááťáŹá¸ ááŽáá°ááŽááťáž áá˝áŹááźáŹá¸ááźáŽá¸ (Evenly spaced) ááŤáááşáá˛áˇ Size 10 áážá Array b ááᯠáááşááąáŹááşááŤá
- Array b áážá Element ááťáŹá¸ááᯠááźáąáŹááşá¸ááźááşáážááş (Reverse) ááŤá
- Array a áážááˇáş b ááᯠááąáŤááşá¸ááźáŽá¸ áááŹááşááᯠArray c áá˛áááŻáˇ ááááşá¸áááşá¸ááŤá
Program
Output
Problem 27.4¶
áĄáąáŹááşááŤááŻááşááąáŹááşááťááşááťáŹá¸ ááážááááş Program ááąá¸ááŤ
- Size 5 x 5 áážááá˛áˇ 2D Array áá áşáᯠáááşááąáŹááşááŤá ááąáŹááş (Border) áááşáááşáážá Element ááťáŹá¸ááᯠ1 ááąá¸ááźáŽá¸á áĄáá˝ááşá¸áááŻááşá¸ Element ááťáŹá¸ááᯠ3 ááąá¸ááŤá
- áááşáááŻá¸ 2 áá˝áąááťááşá¸ááŤáááşáá˛áˇ 4 x 3 Matrix áá áşááŻáá˛áˇ ááźážáąáŹááşááŤá
- ááąá¸ááŹá¸ááąáŹ 1D Array áá áşááŻáĄáá˝ááşá¸áážá áááşáááŻá¸ 2 áážááˇáş 8 ááźáŹá¸áážáááąáŹ Element ááťáŹá¸ááᯠáĄáážáŻááşááášááᏠ(Negate) ááźáąáŹááşá¸ááŤá (áá°áááşá¸ Array áá˛áážáŹáááş ááźáąáŹááşá¸áá˛ááźááşá¸ - in place)á
Program
import numpy as np
# Note: Code logic requires modification to set inner elements to 3
a = np.ones((5,5))
# a[1:-1, 1:-1] = 3 # (This line is needed to match the description)
print(a)
b = np.ones((4,3)) # Creating 4x3 matrix
c = np.full((3,5),2) # Creating matrix for multiplication
d = b @ c # Matrix Multiplication
print(d)
e = np.arange(11)
print(e)
e[(2 < e) & (e < 8)] *= -1 # Negating elements between 2 and 8
print(e)
Output
Exercises¶
[A] áĄáąáŹááşá፠ááąáŹáşááźááťááşááťáŹá¸áááş áĄáážááş (True) áááŻáˇáááŻááş áĄáážáŹá¸ (False) ááźá áşááźáąáŹááşá¸ ááąáŹáşááźááŤ
- Python ááᯠInstall ááŻááşáááŻááşááŹáá˛áˇ Numpy library á፠áĄáááŻáĄááťáąáŹááş Install ááźá áşááźáŽá¸ááŹá¸ ááźá áşáááşá
- Numpy array áá˝áąá Python List áá˝áąáááş áááŻááźááşáááşá
- Numpy array element áá˝áąá áĄááťááŻá¸áĄá áŹá¸ (Data Type) ááá°ááŽááŹáá˝áą ááąáŹáážáąáŹááŤáááşáááŻáˇ ááááşá
- Numpy array áá áşááŻááᯠáááşááąáŹááşááźáŽá¸áá˝áŹá¸áááş áá°áˇáá˛áˇ Size áá˛áˇ Shape ááᯠááźáąáŹááşá¸áá˛áááŻáˇ ááááąáŹáˇááŤá (Dynamically cannot change)
- np.array_equal(a,b) áááş Array a áážááˇáş b á Shape ááąáŹ Element áá˝áąá፠áá°ááŽáážáᏠTrue ááᯠááźááşááąá¸áááşá
[B] áĄáąáŹááşá፠ááąá¸áá˝ááşá¸ááťáŹá¸ááᯠááźáąáááŻááŤ
- (a) áááááŻáśá¸ áááŹáááááşá¸ (Natural numbers) áá ááŻáśá¸ááŤáááşáá˛áˇ Numpy Array ááᯠáááşááᯠáááşááąáŹááşááá˛?
- (b) Numpy áááŻááŻáśá¸ááźáŽá¸ ááááşá¸áážáŻááş (Complex numbers) Array áá˝áąááᯠáááşááąáŹááşáááŻáˇ áááŤáááŹá¸?
- © Size 3 x 4 x 5 áážááá˛áˇ Array á ááŻááᯠáááşááąáŹááşááźáŽá¸ áá áşááŻááťááşá¸á áŽáážáŹ 0 áá˝áąááťááşá¸á 1 áá˝áąááťááşá¸á 5 áá˝áąááťááşá¸á Random áááşáááŻá¸ááťáŹá¸áážááˇáş Garbage áááşáááŻá¸ááťáŹá¸ áĄááŽá¸ááŽá¸ ááźááˇáşáá˝ááşá¸ááťááşáááş áááşáááŻááŻááşááá˛?
- (d) á ááž á áááşááąáŹ áááááşá¸ (Odd numbers) ááťáŹá¸ááŤáááşáááˇáş Element á á áážáááąáŹ Array áá áşááŻááᯠáááşááᯠáááşááąáŹááşááá˛?
- (e) Numpy array áá áşááŻáá˛áˇ Element áĄááťááŻá¸áĄá áŹá¸ (Type)á áĄááąáĄáá˝ááşá Base Address áážááˇáş ááąááŹáá°ááŹá¸ááąáŹ Byte áááŹááááŻáˇááᯠáááşááᯠáááááŻááşááá˛?
- (f) a1 = np.array([[1,2,3,4],[5,6,7,8]]) áᯠáááşááąáŹááşááŹá¸ááąáŹ Array á Dimension áážááˇáş Shape ááᯠáááşááᯠáááááŻááşááá˛?
- (g) 3 x 4 Matrix áážá áşáᯠááąá¸ááŹá¸ááŤá áááşá¸áááŻáˇá áááşáááŻááşáᏠElement áĄááťááşá¸ááťááşá¸ ááąáŤááşá¸ááźááşá¸á áážáŻááşááźááşá¸á ááźážáąáŹááşááźááşá¸ áážááˇáş á áŹá¸ááźááşá¸áááŻáˇááᯠáááşááᯠááŻááşááąáŹááşááá˛?
-
(h) áĄáąáŹááşá፠Code ááťáŹá¸áĄáááş áááşáááşáááŻáˇáááş Numpy array á Scalar arithmetic operations ááťáŹá¸ ááźá áşááźááááşá¸?
[C] Match The Following pairs:
| ááŻááş / ááŻááşááąáŹááşááťááş | ááąáŹáşááźááťááş |
|---|---|
(a) s = np.trace(a) |
1. á áŹáááşá¸áĄááşá¸áááŻááşáᏠáá˝ááşááťááşááźááşá¸ (Statistical Operation) |
(b) s = a.cumsum(axis = 1) |
2. Linear Algebra áá˝ááşááťááşááźááşá¸ |
© a2 = np.copy(a1) |
3. Deep copy ááźáŻááŻááşááźááşá¸ |
(d) print(a1 < 2) |
4. áááşáááŻááşáᏠElement áĄááťááşá¸ááťááşá¸ áážááŻááşá¸áážááşááźááşá¸ |
(e) print(a1 > a2) |
5. áááşáááŻá¸áá áşááŻáááşá¸áážááˇáş áážááŻááşá¸áážááşááźááşá¸ (Scalar comparison) |
(f) print(a[1:3][3:6]) |
6. Bitwise ááŻááşááąáŹááşááťááş |
(g) a2 = invert(a1) |
7. Inversion ááźáŻááŻááşááźááşá¸ / Slicing ááźáŻááŻááşááźááşá¸ |