矩陣的常用運算包括: 加法、減法、點乘、點除和乘法等。
矩陣的加法就是2個矩陣對應位置的數值相加。
in [1]: import numpy as np
in [2]: m1 = np.array([[1, 2, 3], [4, 5, 6]] ,np.uint8)
in [3]: m2 = np.array([[4, 5, 6], [7, 8, 9]] ,np.uint8)
in [4]: s = m1 + m2
in [5]: s
out[5]:
array([[ 5, 7, 9],
[11, 13, 15]], dtype=uint8)
in [6]:
上例中資料型別都是unit8
,如果2個矩陣資料型別不同,如uint8
和float32
,這時候經過加法運算後的資料型別就是float32
了,取數值範圍更大的型別
在opencv
中,同樣可以進行矩陣的加法運算
in [7]: import cv2
in [8]: cv2.add(m1, m2, dtype=cv2.cv_32f)
out[8]:
array([[ 5., 7., 9.],
[11., 13., 15.]], dtype=float32)
矩陣的減法和矩陣加法類似
in [9]: s2 = m2 - m1
in [10]: s2
out[10]:
array([[3, 3, 3],
[3, 3, 3]], dtype=uint8)
再來看看下面的示例,
in [11]: s3 = m1 - m2
in [12]: s3
out[12]:
array([[253, 253, 253],
[253, 253, 253]], dtype=uint8)
來看uint8
的情況,第一行第一列的結果,1 - 4 = -3,然後針對255取模,-3 % 255 + 1 = 253
矩陣的點乘即2個矩陣對應位置的數值相乘。矩陣點乘可以使用*
運算子或者np.multiply
in [14]: s4 = m1 * m2
in [15]: s4
out[15]:
array([[ 4, 10, 18],
[28, 40, 54]], dtype=uint8)
in [16]: np.multiply(m1, m2)
out[16]:
array([[ 4, 10, 18],
[28, 40, 54]], dtype=uint8)
矩陣點除和點乘運算類似,對應位置的數值相除
in [17]: s5 = m2 / m1
in [18]: s5
out[18]:
array([[4. , 2.5 , 2. ],
[1.75, 1.6 , 1.5 ]])
可以使用numpy.dot
方法實現矩陣的乘法,要求第乙個矩陣的列和第二個矩陣的行一致
in [20]: m3 = np.array([[1, 2], [3, 4], [5, 6]], np.uint8)
in [21]: np.dot(m1, m3)
out[21]:
array([[22, 28],
[49, 64]], dtype=uint8)
矩陣的運算
目錄 1.矩陣與數相乘 每一項都要乘 2.矩陣的加減運算 每一項都要乘 3.矩陣相乘 4.矩陣對應元素相乘 同型矩陣 5.矩陣的轉置 t 6.矩陣的共軛轉置 h 7.矩陣的逆 i 8.矩陣的試圖 a import numpy as np m1 np.mat 1,2,3 2,3,4 print m m...
矩陣的運算
1 include2 using namespace std 3int main 1920 21 cout 請輸入矩陣b的行數和列數 22 cin x k 23 cout 請輸入矩陣b 24for int i 0 i x i 253031 32 cout 矩陣a為 33for int i 0 i n...
矩陣運算 矩陣旋轉
以下不加證明地給出在世界座標系中,以座標點 0,0,0 為原點的旋轉矩陣 包含平移的線性變換稱作仿射變換,3d中的仿射變換不能用 3 x 3 矩陣表達,必須使用4 x 4矩陣 1.繞x座標軸旋轉 1 0 0 0 0 cos a sin a 0 0 sin a cos a 0 0 0 0 1 2.繞y...