numpy库的使用方法—Python

numpy是python用于科学计算的基础工具库。它包含以下四大功能:

  1. 强大的多维数组处理对象
  2. 复杂的函数功能
  3. 有用的线性代数,傅里叶级数和随机数功能
  4. 集成C/C++和FORTRAN代码的工具

    numpy库的使用方法—Python

    • 一、 numpy的基本使用
      • 1.函数的导入
      • 2.数组的创建
        • 1.查看数据类型
        • 2.创建等差和等比数列
        • 3. 矩阵的生成
      • 3.数组元素的索引
    • 二、矩阵的合并与分割
      • 1.矩阵的合并
      • 2.矩阵的分割
    • 三、矩阵的简单运算
      • 1.求和
      • 2.矩阵的逐个元素运算
    • 四、 矩阵运算与线性代数
      • 1.范数的计算
      • 2.求解线性方程组
      • 3.求特征值和特征向量

一、 numpy的基本使用

1.函数的导入

import numpy as np

2.数组的创建

1.查看数据类型

import numpy as np

a1 = np.array([1, 2, 3, 4])#生成整数型数组
a2=a1.astype(float)#转化为浮点数,此命令等于下面这个
a3=np.array([1, 2, 3, 4],dtype=float)#浮点数
#查看数据类型
a1.dtype
a2.dtype

numpy库的使用方法—Python_第1张图片
一个是整数,一个是浮点数

2.创建等差和等比数列

等差数列:
arange(start,none,step,dtype) 分别是下限,上限,间隔,数字类型

np.arange(0,100,2)

在这里插入图片描述
linspace(statrt,stop,num,endpoint=T)分别是下限,上限,生成数字的个数,是否输出最后一个数字

np.linspace(0,100,50,endpoint=False)

numpy库的使用方法—Python_第2张图片
等比数列

np.logspace(0,10,num=20,dtype=int) 

numpy库的使用方法—Python_第3张图片

3. 矩阵的生成

a=np.ones(4,int)#输出[1, 1, 1, 1]
b=np.ones((4,3),int)#输出四行三列的1
c=np.zeros((4,3),int)#输出4行3列的0矩阵
d=np.eye(4)#生成4阶单位阵
e=np.eye(4,k=2);e#输出第k对角线元素为1,其他行元素为0的矩阵
f=np.zeros_like(a)#生成与a同维数的全0数组

numpy库的使用方法—Python_第4张图片

3.数组元素的索引

a=np.arange(16).reshape(4,4);a#生成四行四列的矩阵
b=a[1][2]#输出第2行第3个,输出6,此命令等于下面这个
c=a[1,2]   #输出结果也是6
x=np.array([0,1,2,1])
print(a[x==1])#输出第2行和第四行

numpy库的使用方法—Python_第5张图片

二、矩阵的合并与分割

1.矩阵的合并

import numpy as np
a=np.arange(16).reshape(4,4);a
b=np.floor(5*np.random.random((2,4)));b#生成一个2行4列在0到1上的随机矩阵,乘以5,只保留整数部分
c=np.ceil(4*np.random.randint(4,7,(4,2)))#生成一个4行2列在4到7上的随机整数矩阵,乘以4,ceil是向上取整函数
np.vstack([a,b])#上下合并矩阵,放在另外一个矩阵的下面
np.hstack([a,c])#左右和并矩阵

三个矩阵
numpy库的使用方法—Python_第6张图片
合并结果:
numpy库的使用方法—Python_第7张图片

2.矩阵的分割

vsplit(a,m)把矩阵a平均分为m个行数组
hsplit(a,n)把矩阵a平均分为n个行数组

import numpy as np
a=np.arange(16).reshape(4,4)
b=np.vsplit(a,2);b#分成两个行数组
print(b)
c=np.hsplit(a,2)#分成两个列数组
print(c)

numpy库的使用方法—Python_第8张图片

三、矩阵的简单运算

1.求和

import numpy as np
a=np.array([[1,2,3],[0,0,1],[1,2,1]])
a.sum()#求所有元素的和
sum(a)#求每一列元素的和,与下面两个命令等价
np.sum(a,axis=0,keepdims=True)
np.sum(a,axis=0)
np.sum(a,axis=1)#逐行求和

2.矩阵的逐个元素运算

import numpy as np
a=np.array([[1,2,3],[0,0,1],[1,2,1]])
b=np.array([[1,2,3],[1,1,1],[1,2,1]])
a/b#两个矩阵对应元素相除
a*b#两个矩阵对应元素相乘
a+b#两个矩阵对应元素相加
a-b#两个矩阵对应元素相减
a**(1/2)#a矩阵所有元素都开根号

四、 矩阵运算与线性代数

表 1 numpy.linalg常用函数
函数 说明
norm 求矩阵的范数
inv 求逆矩阵
pinv 求矩阵的广义矩阵
solve 求解线性方程组
det 行列式
lslsq 最小二乘法求超定方程组
eig 求矩阵的特征值和特征向量
svd 矩阵的奇异值分解
qr 矩阵的QR分解

1.范数的计算

定义:范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即①非负性;②齐次性;③三角不等式。它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。

例如:

向量 [ 1 , 2 , 3 ] T [1,2,3]^T [1,2,3]T的欧式范数(Euclidean norm) 为 1 2 + 2 2 + 3 2 = 13 \sqrt{1^2+2^2+3^2}=\sqrt{13} 12+22+32 =13 用于表示向量的大小,这个范数也被叫做 l 2 l_2 l2 -范数。

为方便统一,一般将任意向量 x 的 l p l_p lp -范数定义为:
∣ ∣ x ∣ ∣ = ∑ i ∣ x i ∣ p p \left| \left| x \right| \right|=\sqrt[p]{\sum_i{\left| x_i \right|^p}} x=pixip

[参考文章](

import numpy as np
a=np.array([[0,3,4],[1,6,4]])
b=np.linalg.norm(a,axis=1)#行向量的2范数
c=np.linalg.norm(a,axis=0)#列向量的2范数
d=np.linalg.norm(a)#求矩阵的2范数
print("行向量的2范数为:",np.round(b,4))
print("列向量的2范数为:",np.round(c,4))
print("矩阵的2范数为:",np.round(d,4))

numpy库的使用方法—Python_第9张图片

2.求解线性方程组

例1:
{ 3 x + y = 9 x + 2 y = 8 \begin{cases} 3x+y=9\\ x+2y=8\\ \end{cases} {3x+y=9x+2y=8
解法一:

根据 A X = B 可以求出 X = A − 1 B 于是我们可以先求出 A 的逆矩阵然后乘以 B \text{根据}AX=B\text{可以求出}X=A^{-1}B \\ \text{于是我们可以先求出}A\text{的逆矩阵然后乘以}B 根据AX=B可以求出X=A1B于是我们可以先求出A的逆矩阵然后乘以B

import  numpy as np
a=np.array([[3,1],[1,2]]);a
b=np.array([9,8]);b
np.linalg.inv(a)@b#@表示矩阵乘法
import  numpy as np
a=np.array([[3,1],[1,2]]);a
b=np.array([9,8]);b
np.linalg.inv(a)@b#@表示矩阵乘法

方法二:直接根据np.linalg.solve函数来求

## 方法二:
np.linalg.solve(a,b)

求的结果都是X=2,Y=3
例2:
{ 3 x + y = 9 x + 2 y = 8 x + y = 6 \left\{ \begin{array}{c} \begin{array}{l} 3x+y=9\\ x+2y=8\\ \end{array}\\ x+y=6\\ \end{array} \right. 3x+y=9x+2y=8x+y=6

import  numpy as np
a=np.array([[3,1],[1,2],[1,1]]);a
b=np.array([9,8,6]);b
c=np.linalg.pinv(a)@b#@表示矩阵乘法
print(np.round(c,2))

在这里插入图片描述

3.求特征值和特征向量

求下面矩阵的特征值和特征向量
∣ 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 ∣ \left| \begin{matrix} 0& 0& 0& 1\\ 0& 1& 1& 0\\ 0& 1& 0& 0\\ 1& 0& 0& 0\\ \end{matrix} \right| 0001011001001000

a=np.eye(4)
b=np.rot90(a)#将a矩阵顺时针旋转90度,得到我们将向的矩阵
c,d=np.linalg.eig(b)
print("特征值:",c)
print("eigenvector:\n",np.round(d,3))

numpy库的使用方法—Python_第10张图片
参考书籍

你可能感兴趣的:(python,numpy,python,开发语言)