>  기사  >  백엔드 개발  >  Python 행렬의 일반적인 작업에 대한 샘플 코드 공유

Python 행렬의 일반적인 작업에 대한 샘플 코드 공유

黄舟
黄舟원래의
2017-10-03 05:46:481916검색

이 글은 주로 Python 행렬의 일반적인 연산을 소개하며, Python 행렬의 생성과 곱셈, 역산, 전치 및 기타 관련 연산의 구현 방법을 예제 형식으로 요약하고 분석합니다.

이 문서의 예제에서는 Python의 일반적인 행렬 연산을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

Python의 numpy 라이브러리는 행렬 연산을 제공하므로 행렬 연산이 필요할 때 numpy 패키지를 가져와야 합니다.

1. numpy 가져오기 및 사용

from numpy import *;#导入numpy的库函数
import numpy as np; #这个方式使用numpy的函数时,需要以np.开头。


2. 행렬 생성

1차원 또는 2차원 데이터에서 행렬 만들기

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的对角矩阵


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);

매트릭스 도트 product


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));//按行合并,即行数不变,扩展列数


IV. 행렬, 목록 및 배열의 ​​변환

목록은 수정될 수 있으며 목록의 요소는 다른 유형의 데이터일 수 있습니다.

l1=[[1],'hello',3];
Arrays in 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();//将数组转换成列表

여기서 세 가지 사이의 변환이 매우 간단하다는 것을 알 수 있습니다. 여기서 주목해야 할 것은 목록이 1차원인 경우 배열과 행렬로 변환한 후라는 것입니다. , 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];//这个时候获取的就是矩阵的元素的数值,而不再是矩阵的类型

위 내용은 Python 행렬의 일반적인 작업에 대한 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.