python 矩陣(mat)操作

2021-07-31 22:55:35 字數 3337 閱讀 1667

from 

python的numpy庫提供矩陣運算的功能,因此我們在需要矩陣運算的時候,需要匯入numpy的包。

from numpy import *;#匯入numpy的庫函式

import numpy as np; #這個方式使用numpy的函式時,需要以np.開頭。

由一維或二維資料建立矩陣

from numpy import *;

a1=array([1,2,3]);

a1=mat(a1);

建立常見的矩陣

data1=mat(zeros((3,3)));

#建立乙個3*3的零矩陣,矩陣這裡zeros函式的引數是乙個tuple型別(3,3)

data2=mat(ones((2,4)));

#建立乙個2*4的1矩陣,預設是浮點型的資料,如果需要時int型別,可以使用dtype=int

data3=mat(random.rand(2,2));

#這裡的random模組使用的是numpy中的random模組,random.rand(2,2)建立的是乙個二維陣列,需要將其轉換成#matrix

data4=mat(random.randint(10,size=(3,3)));

#生成乙個3*3的0-10之間的隨機整數矩陣,如果需要指定下界則可以多加乙個引數

data5=mat(random.randint(2,8,size=(2,5));

#產生乙個2-8之間的隨機整數矩陣

data6=mat(eye(2,2,dtype=int));

#產生乙個2*2的對角矩陣

a1=[1,2,3];

a2=mat(diag(a1));

#生成乙個對角線為1、2、3的對角矩陣

1. 矩陣相乘

a1=mat([1,2]);      

a2=mat([[1],[2]]);

a3=a1*a2;

#1*2的矩陣乘以2*1的矩陣,得到1*1的矩陣

2. 矩陣點乘

矩陣對應元素相乘

a1=mat([1,1]);

a2=mat([2,2]);

a3=multiply(a1,a2);

矩陣點乘

a1=mat([2,2]);

a2=a1*2;

3.矩陣求逆,轉置

矩陣求逆

a1=mat(eye(2,2)*0.5);

a2=a1.i;

#求矩陣matrix([[0.5,0],[0,0.5]])的逆矩陣

矩陣轉置

a1=mat([[1,1],[0,0]]);

a2=a1.t;

4.計算矩陣對應行列的最大、最小值、和。

a1=mat([[1,1],[2,3],[4,2]]);
計算每一列、行的和

a2=a1.sum(axis=0);//列和,這裡得到的是1*2的矩陣

a3=a1.sum(axis=1);//行和,這裡得到的是3*1的矩陣

a4=sum(a1[1,:]);//計算第一行所有列的和,這裡得到的是乙個數值

計算最大、最小值和索引

a1.max();//計算a1矩陣中所有元素的最大值,這裡得到的結果是乙個數值

a2=max(a1[:,1]);//計算第二列的最大值,這裡得到的是乙個1*1的矩陣

a1[1,:].max();//計算第二行的最大值,這裡得到的是乙個乙個數值

np.max(a1,0);//計算所有列的最大值,這裡使用的是numpy中的max函式

np.max(a1,1);//計算所有行的最大值,這裡得到是乙個矩陣

np.argmax(a1,0);//計算所有列的最大值對應在該列中的索引

np.argmax(a1[1,:]);//計算第二行中最大值對應在改行的索引

5.矩陣的分隔和合併

矩陣的分隔,同列表和陣列的分隔一致。

a=mat(ones((3,3)));

b=a[1:,1:];//分割出第二行以後的行和第二列以後的列的所有元素

矩陣的合併

a=mat(ones((2,2)));

b=mat(eye(2));

c=vstack((a,b));//按列合併,即增加行數

d=hstack((a,b));//按行合併,即行數不變,擴充套件列數

列表可以修改,並且列表中元素可以使不同型別的資料,如下:

l1=[[1],'hello',3];
numpy中陣列,同乙個陣列中所有元素必須為同乙個型別,有幾個常見的屬性:

a=array([[2],[1]]);

dimension=a.ndim;

m,n=a.shape;

number=a.size;//元素總個數

str=a.dtype;//元素的型別

numpy中的矩陣也有與陣列常見的幾個屬性。 

它們之間的轉換:

a1=[[1,2],[3,2],[5,2]];//列表

a2=array(a1);//將列表轉換成二維陣列

a3=array(a1);//將列表轉化成矩陣

a4=array(a3);//將矩陣轉換成陣列

a5=a3.tolist();//將矩陣轉換成列表

a6=a2.tolist();//將陣列轉換成列表

這裡可以發現三者之間的轉換是非常簡單的,這裡需要注意的是,當列表是一維的時候,將它轉換成陣列和矩陣後,再通過tolist()轉換成列表是不相同的,需要做一些小小的修改。如下:

a1=[1,2,3];

a2=array(a1);

a3=mat(a1);

a4=a2.tolist();//這裡得到的是[1,2,3]

a5=a3.tolist();//這裡得到的是[[1,2,3]]

a6=(a4 == a5);//a6=false

a7=(a4 is a5[0]);//a7=true,a5[0]=[1,2,3]

矩陣轉換成數值,存在以下一種情況:

datamat=mat([1]);

val=datamat[0,0];//這個時候獲取的就是矩陣的元素的數值,而不再是矩陣的型別

初識Mat矩陣

mat矩陣是乙個類,定義於core.cpp中 mat舉證包含兩個部分 矩陣頭 包含矩陣的大小,儲存方式,矩陣儲存位址 指向矩陣包含畫素值的指標 data font size 12px class cv exports mat mat的儲存是逐行儲存的,矩陣中的資料型別包括 mat 對應的是cv 8u...

Mat類編寫矩陣乘法和加法操作

include include opencv2 opencv.hpp using namespace std using namespace cv mat inputmatrix void return matrix1 mat operate function mat matrix1,mat mat...

opencv 求解Mat矩陣的逆矩陣

opencv中cv invert 可直接用來求解矩陣的逆矩陣 函式原型如下 double cv invert inputarray src,outputarray dst,int flags decomp lu parameters src 待求解的矩陣 dst 輸出的逆矩陣 flags 求解方法 ...