+[ BIGz ]+

คูณ Matrix

ธันวาคม 16, 2007 · ให้ความเห็น

วันนี้ไม่รู้นึกครึ้มอะไร ตื่นมาเปิด podcast วิชา PL ของ อ. รวิทัต ฟัง เห็นให้น้องเขียน โปรแกรม คูณ Matrix ขนาด 1000 x 1000 ฟังแล้วก็อยากเขียนมั่ง ก็เลยลองดูแบบเถือกๆ ได้มาประมาณนี้
def Mul(MatrixA,MatrixB):
size = len(MatrixA[0])
MatrixC,tmp = zeros((size,size),int),0
for i in range(size):
for j in range(size):
for k in range(size):
tmp += MatrixA[i][k]*MatrixB[k][j]
MatrixC[i][j] = tmp
tmp = 0
return MatrixC

ลองแค่ 500 x 500 ก็ต้องหลับรอแล้ว ก็เลยลองพยายามหาวิธีให้มันไวขึ้นซักหน่อย

def MulMatrix(MatrixA,MatrixB):
size = len(MatrixA[0])
MatrixC = zeros((size,size),int)
for row in range(size):
for col in range(size):
MatrixB[row][col] = MatrixA[row][col]
for row in range(size):
for col in range(size):
MatrixC[row][col] = sum(MatrixA[row] * MatrixB[col])
return MatrixC

ทำเวลาได้ประมาณ 20 วิ
ถึงกับตกใจ เห้ย มันเป็นไปได้ยังไง แค่เอา matrix b มาสลับแถวกับหลัก แล้วก็ใช้ * array ของตัว python เอง แค่เนี้ย ไวขึ้นอย่างน่าเหลือเชื่อ งงไปเลย

หมวดหมู่: Python

0 responses so far ↓

  • There are no comments yet...Kick things off by filling out the form below.

ให้ความเห็น