from numpy import inf
from numpy import array
from numpy import identity
from numpy import trace
from numpy import count_nonzero
from numpy import tensordot
from numpy import tril, triu, diag
from numpy.linalg import norm, inv, det, matrix_rank
from scipy.sparse import csr_matrix
Matrices
Vectors and Vector Arithmetic
Defining a Vector
= array([1,2,3])
vector print(vector)
[1 2 3]
Vector Arithmetic
Vector Addition
= array([1,2,3])
a print(a)
[1 2 3]
= array([4,5,6])
b print(b)
[4 5 6]
= a + b
c print(c)
[5 7 9]
Vector Subtraction
= array([1,2,3])
a print(a)
[1 2 3]
= array([0.5,0.5,0.5])
b print(b)
[0.5 0.5 0.5]
= a - b
c print(c)
[0.5 1.5 2.5]
Vector Multiplication
= array([1,2,3])
a print(a)
[1 2 3]
= array([1,2,3])
b print(b)
[1 2 3]
= a*b
c print(c)
[1 4 9]
Vector Division
= array([1,2,3])
a print(a)
[1 2 3]
= array([1,2,3])
b print(b)
[1 2 3]
= a/b
c print(c)
[1. 1. 1.]
Vector Dot Product
= array([1,2,3])
a print(a)
[1 2 3]
= array([1,2,3])
b print(b)
[1 2 3]
= a.dot(b)
c print(c)
14
Vector-Scalar Multiplication
= array([1,2,3])
a print(a)
[1 2 3]
= 0.5
b print(b)
0.5
= b*a
c print(c)
[0.5 1. 1.5]
Vector Norms
= array([1,2,3])
a print(a)
[1 2 3]
Vector L1 Norm
= norm(a, 1)
l1 print(l1)
6.0
Vector L2 Norm
= norm(a)
l2 print(l2)
3.7416573867739413
Vector Max Norm
= norm(a,inf)
maxnorm print(maxnorm)
3.0
Matrices and Matrix Arithmetic
Defining a Matrix
= array([[1,2,3],
A 4,5,6]])
[print(A)
[[1 2 3]
[4 5 6]]
Matrix Arithmetic
= array([[1,2,3],
A 4,5,6]])
[print(A)
[[1 2 3]
[4 5 6]]
= array([[1,2,3],
B 4,5,6]])
[print(B)
[[1 2 3]
[4 5 6]]
Matrix Addition
= A + B
C print(C)
[[ 2 4 6]
[ 8 10 12]]
Matrix Subtraction
= A - B
C print(C)
[[0 0 0]
[0 0 0]]
Matrix Multiplication (Hadamard Product)
= A *B
C print(C)
[[ 1 4 9]
[16 25 36]]
Matrix Division
= A / B
C print(C)
[[1. 1. 1.]
[1. 1. 1.]]
Matrix-Matrix Multiplication
= array([
A 1,2],
[3,4],
[5,6]])
[print(A)
[[1 2]
[3 4]
[5 6]]
= array([
B 1,2],
[3,4]])
[print(B)
[[1 2]
[3 4]]
= A.dot(B)
C print(C)
[[ 7 10]
[15 22]
[23 34]]
= A @ B
D print(D)
[[ 7 10]
[15 22]
[23 34]]
Matrix-Vector Multiplication
= array([
A 1,2],
[3,4],
[5,6]])
[print(A)
[[1 2]
[3 4]
[5 6]]
= array([0.5, 0.5])
b print(b)
[0.5 0.5]
= A.dot(b)
C print(C)
[1.5 3.5 5.5]
Matrix-Scalar Multiplication
= array([
A 1,2],
[3,4],
[5,6]])
[print(A)
[[1 2]
[3 4]
[5 6]]
= 0.5
b print(b)
0.5
= A*b
C print(C)
[[0.5 1. ]
[1.5 2. ]
[2.5 3. ]]
Types of Matrices
Square Matrix
Symmetric Matrix
Triangular Matrix
= array([
M 1,2,3],
[1,2,3],
[1,2,3]])
[print(M)
[[1 2 3]
[1 2 3]
[1 2 3]]
= tril(M)
lower print(lower)
[[1 0 0]
[1 2 0]
[1 2 3]]
= triu(M)
upper print(upper)
[[1 2 3]
[0 2 3]
[0 0 3]]
Diagonal Matrix
= array([
M 1,2,3],
[1,2,3],
[1,2,3]])
[print(M)
[[1 2 3]
[1 2 3]
[1 2 3]]
= diag(M)
d print(d)
[1 2 3]
= diag(d)
D print(D)
[[1 0 0]
[0 2 0]
[0 0 3]]
Identity Matrix
= identity(3)
I print(I)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
Orthogonal Matrix
= array([
Q 1,0],
[0,-1]])
[print(Q)
[[ 1 0]
[ 0 -1]]
= inv(Q)
V print(V)
[[ 1. 0.]
[-0. -1.]]
print(Q.T)
[[ 1 0]
[ 0 -1]]
= Q.dot(Q.T)
I print(I)
[[1 0]
[0 1]]
Matrix Operations
Transpose
= array([
A 1,2],
[3,4],
[5,6]])
[print(A)
[[1 2]
[3 4]
[5 6]]
= A.T
C print(C)
[[1 3 5]
[2 4 6]]
Inverse
= array([
A 1.0, 2.0],
[3.0, 4.0]])
[print(A)
[[1. 2.]
[3. 4.]]
= inv(A)
B print(B)
[[-2. 1. ]
[ 1.5 -0.5]]
= A.dot(B)
I print(I)
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
Trace
= array([
A 1,2,3],
[4,5,6],
[7,8,9]])
[print(A)
[[1 2 3]
[4 5 6]
[7 8 9]]
= trace(A)
B print(B)
15
Determinant
= array([
A 1,2,3],
[4,5,6],
[7,8,99]])
[print(A)
[[ 1 2 3]
[ 4 5 6]
[ 7 8 99]]
= det(A)
B print(B)
-269.99999999999983
Rank
= array([1,2,3])
v1 print(v1)
[1 2 3]
print(matrix_rank(v1))
1
= array([0,0,0,0,0])
v2 print(v2)
[0 0 0 0 0]
print(matrix_rank(v2))
0
= array([
M0 0,0],
[0,0]])
[print(M0)
[[0 0]
[0 0]]
print(matrix_rank(M0))
0
= array([
M1 1,2],
[1,2]])
[print(M1)
[[1 2]
[1 2]]
print(matrix_rank(M1))
1
= array([
M2 1,2],
[3,4]])
[print(M2)
[[1 2]
[3 4]]
print(matrix_rank(M2))
2
Sparse Matrices
Sparse Matrices in Python
= array([
A 1,0,0,1,0,0],
[0,0,2,0,0,1],
[0,0,0,2,0,0]])
[print(A)
[[1 0 0 1 0 0]
[0 0 2 0 0 1]
[0 0 0 2 0 0]]
= csr_matrix(A)
S print(S)
(0, 0) 1
(0, 3) 1
(1, 2) 2
(1, 5) 1
(2, 3) 2
= S.todense()
B print(B)
[[1 0 0 1 0 0]
[0 0 2 0 0 1]
[0 0 0 2 0 0]]
= 1.0 - count_nonzero(A) / A.size
sparsity print(sparsity)
0.7222222222222222
Tensors and Tensor Arithmetic
Tensors in Python
= array([
T 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[print(T)
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]]
[[11 12 13]
[14 15 16]
[17 18 19]]
[[21 22 23]
[24 25 26]
[27 28 29]]]
print(T.shape)
(3, 3, 3)
Tensor Arithmetic
Tensor Addition
= array([
A 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= array([
B 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= A + B
C print(C)
[[[ 2 4 6]
[ 8 10 12]
[14 16 18]]
[[22 24 26]
[28 30 32]
[34 36 38]]
[[42 44 46]
[48 50 52]
[54 56 58]]]
Tensor Subtraction
= array([
A 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= array([
B 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= A - B
C print(C)
[[[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]]]
Tensor Hadamard Product
= array([
A 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= array([
B 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= A * B
C print(C)
[[[ 1 4 9]
[ 16 25 36]
[ 49 64 81]]
[[121 144 169]
[196 225 256]
[289 324 361]]
[[441 484 529]
[576 625 676]
[729 784 841]]]
Tensor Division
= array([
A 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= array([
B 1,2,3], [4,5,6], [7,8,9]],
[[11,12,13], [14,15,16], [17,18,19]],
[[21,22,23], [24,25,26], [27,28,29]]])
[[
= A / B
C print(C)
[[[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.]]]
Tensor Product
= array([1,2])
A = array([3,4]) B
= tensordot(A, B, axes=0)
C print(C)
[[3 4]
[6 8]]