Skip to content

Instantly share code, notes, and snippets.

@khaschuluu
Created March 6, 2011 02:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save khaschuluu/856947 to your computer and use it in GitHub Desktop.
Save khaschuluu/856947 to your computer and use it in GitHub Desktop.
For Python 03 in CosmosBirds.org
# Матрицийг row мөр, col баганатайгаар үүсгэнэ.
# Жагсаалт үүсгээд, жагсаалт дотороо дахин row тооны жагсаалт үүсгээд,
# жагсаал доторх жагсаалт бүрийг col тооны 0 элемэнтээр дүүргэнэ.
def matrix(row, col):
matrix = []
for i in xrange(row):
matrix.append([])
for j in xrange(col):
matrix[i].append(0)
return matrix
# A матрицийн мөрийн тоо нь мөрүүд буюу шууд A-гийн урт байна.
def row(A):
return A.__len__()
# A матрицийн багнын тоо нь аль нэг мөрийн элементүүдийн тоо байна.
def col(A):
return A[0].__len__()
# A матриц дээр B матрицийг нэмэх.
# А матриц B матриц тэнцүү бол харгалзах элемэнт бүрийг нэмнэ.
def add(A, B):
# A болон B матрицийн багна, мөрийн тоо тэнцүү байх хэрэгтэй.
if row(A) == row(B) and col(A) == col(B):
# Багна мөрийн тоо тэнцүү бол нэмэх үйлдлийн үр дүнд зориулсан C матриц үүсгэв.
C = matrix(row(A), col(A))
# i мөр, j нь i алхам бүр дээр багна дотуур гүйхдээ тухайн [i, j] байрлал дахь элементүүдийг нэмнэ.
# Үр дүнг C матрицийн харгалзах элементэд өгнө.
for i in xrange(row(A)):
for j in xrange(col(A)):
C[i][j] = A[i][j] + B[i][j]
return C
else:
print "error in addition: Have a not result"
# A матрицийг a тоогоор скаляр үржих.
# А-гийн элемент бүрийг a тоогоор үржих.
def scalar(A, a):
C = matrix(row(A), col(A))
for i in xrange(row(A)):
for j in xrange(col(A)):
C[i][j] = A[i][j] * a
return C
# А матрицаас B матрицийг хасах.
# Эн нь B-гийн бүх элементийг -1-ээр скаляр үржүүлээд A матриц дээр нэмсэнтэй тэнцүү.
def minus(A, B):
return add(A, scalar(B, -1))
# A матрицийг B матрицад үржүүлэх.
# А-гийн багна багнатай, B-гийн мөр мөртэй матриц үүсэх ба
# [i, j] дахь элемент бүр нь summation(A[i][all]*B[all][j]).
def multiple(A, B):
# A-гийн баганын тоо B гийн мөрийн тоотой тэнцүү байх.
if col(A) == row(B):
C = matrix(row(A), col(B))
# i A гийн мөрүүдээр,
# j нь i алхам бүрт B матрицийн багануудар,
# l нь j алхам бүрт A матрицийн багануудаар гүйхдээ
# Харгалзах C[i][j] бүр дотор l гүйж,
# алхам бүр дээр A[i][l] * B[l][j] үржүүлээд
# C[i][j]-гийн утга дээр нэмнэ.
for i in xrange(row(A)):
for j in xrange(col(B)):
for l in xrange(col(A)):
C[i][j] = C[i][j] + A[i][l] * B[l][j]
return C
else:
print "error in multiple: Have a not result"
# A матрицийг тонгорох A^T
def transpose(A):
C = matrix(col(A), row(A))
for i in xrange(row(A)):
for j in xrange(col(A)):
C[j][i] = A[i][j]
return C
# Жишээ
A = matrix(3, 2)
B = matrix(2, 3)
A[0][0] = 1
A[0][1] = 2
A[1][0] = 3
A[1][1] = 4
A[2][0] = 5
A[2][1] = 6
B[0][0] = 6
B[0][1] = 5
B[0][2] = 4
B[1][0] = 3
B[1][1] = 2
B[1][2] = 1
C = multiple(transpose(B), transpose(A))
print 'A = ', A
print 'B = ', B
print 'AT = ', transpose(A)
print 'BT = ', transpose(B)
print C
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment