矩陣的運算

2021-10-14 10:50:05 字數 1902 閱讀 4108

矩陣的常用運算包括: 加法、減法、點乘、點除和乘法等。

矩陣的加法就是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個矩陣資料型別不同,如uint8float32,這時候經過加法運算後的資料型別就是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...