Created
March 6, 2011 02:01
-
-
Save khaschuluu/856947 to your computer and use it in GitHub Desktop.
For Python 03 in CosmosBirds.org
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Матрицийг 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