Python - Numpy库的使用(简单易懂)

article/2025/9/10 8:37:10

 目录

numpy多维数组——数组的创建

1、array函数创建数组对象

2、通过arange、linspace函数创建等差数组对象

3、通过logspace函数创建等比数列数组 

函数 zeros ones diag eye full

numpy多维数组——生成随机数

函数 seed rand randn randint 

函数 binomial normal 和不常用函数

 shuffle函数

numpy多维数组——数组的属性 

属性  .ndim  .shape .szie .dtype .itemszie

numpy多维数组——数组的变换

数组重塑方法 .reshape  .flatten

数组合并 .hstack() .vstack() .concatenate((),axis=0/1)

数组分割 .hsplit() .vsplit() .split()

数组的访问——数组的索引和切片

一维数组的索引和切片

多维数组的索引和切片

数组的访问——修改数组元素的值

函数 。append() .insert() .delete()

数组的运算——数组与数组的运算

数组算术运算

二维数组与一维数组的运算

二维数组与二维数组的运算

数组的运算——条件逻辑运算

True/False的数组

where用法

 布尔型索引

数组的运算——numpy库常用的数学函数运算

函数 ceil() floor() round() exp().....

numpy中的数据统计与分析

排序 sort() argsort()

数据去重与重复 去重unique()  重复tile() repeat()

常用统计函数 最大值、最小值、平均值、中值

计算数组的和、最大值、最小值

计算数组均值、中值

计算数组方差、标准差、协方差矩阵

计算数组的百分位数

求解线性方程组——数组与矩阵

数组ndarray和矩阵matrix

矩阵和数组的点乘运算

求解线性方程组 


numpy多维数组——数组的创建

1、array函数创建数组对象

  • 语法格式:np.array(object, dtype=None, ndmin=0)
import numpy as np                     #导入模块并命名为 np
arr1 = np.array([1,2,3],dtype='float') #创建一维数组,数据类型为float
print("一维数组:\n",arr1)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])#创建一个二维数组
print("二维数组:\n",arr2)
一维数组:[1. 2. 3.]
二维数组:[[1 2 3][4 5 6]]

2、通过arange、linspace函数创建等差数组对象

  • arange函数语法格式:np.arange(start, end, step, dtype = None) 左闭右开区间
  • linspace函数语法格式:np.linspace(start, end, num, endpoint=True) 闭区间
import numpy as np             #导入模块并命名为 np
a_arange=np.arange(1,20,5)     #在区间[1, 20)生成初始值为1,步长为5的等差数列
print("arange创建数组:\n",a_arange)       
a_linspace=np.linspace(-1,2,5)  #区间[-1,2]生成初始值-1,5个等间距的等差数列        
print("linspace创建数组:\n",a_linspace)  
arange创建数组:[ 1  6 11 16]
linspace创建数组:[-1.   -0.25  0.5   1.25  2.  ]

3、通过logspace函数创建等比数列数组 

  • 语法格式:np.logspace(start, end, num, endpoint=True, base=10.0)

# 构造从2的0次方到2的9次方的等比数列,该等比数列长度是10个元素.
import numpy as np
a_logspace =np.logspace(0,9,10,base=2)
print(a_logspace)

[  1.   2.   4.   8.  16.  32.  64. 128. 256. 512.]

函数 zeros ones diag eye full

import numpy as np                      #导入模块并命名为 np
a_zeros1 = np.zeros(3,dtype=int)        #创建元素值全是0的一维数组,数据类型为int
print("由0组成的一维数组:\n",a_zeros1)
a_zeros2 = np.zeros([3, 4])               #创建元素值全是0的二维数组
print("由0组成的二维数组:\n",a_zeros2)
b_ones1 = np.ones(3)                      #创建元素值全是1的一维数组
print("由1组成的一维数组:\n",b_ones1)
b_ones2 = np.ones([3, 4])                 #创建元素值全是1的二维数组
print("由1组成的二维数组:\n",b_ones2)
c_diag = np.diag([1,2,3,4])               #创建对角线数组
print("给定对角线二维数组:\n",c_diag)
d_eye=np.eye(3)                           #创建单位数组
print("单位数组:\n",d_eye)
e_full=np.full([4,4], 3)                   #创建值相同的二维数组数组
print("值相同的二维数组数组:\n",e_full)
由0组成的一维数组:[0 0 0]
由0组成的二维数组:[[0. 0. 0. 0.][0. 0. 0. 0.][0. 0. 0. 0.]]
由1组成的一维数组:[1. 1. 1.]
由1组成的二维数组:[[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]]
给定对角线二维数组:[[1 0 0 0][0 2 0 0][0 0 3 0][0 0 0 4]]
单位数组:[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]
值相同的二维数组数组:[[3 3 3 3][3 3 3 3][3 3 3 3][3 3 3 3]]

numpy多维数组——生成随机数

函数 seed rand randn randint 

函数名称

函数功能

seed

种随机数种子,根据同一种子产生的随机数是相同的

rand

产生数组中的值服从均匀分布的随机数

randn

产生数组中的值服从标准正态分布

randint(low[, high, size])

产生随机整数,low:最小值;high:最大值;size:数据个数

import numpy as np                                   #导入模块并命名为 np
np.random.seed(100)                                   #同一种子产生的一组随机数是相同的
a_randint1=np.random.randint(0, 20, 5)       # 生成一维数组, 5个0到20之间的随机整数
print("由随机整数组成的一维数组:\n",a_randint1)
a_randint2=np.random.randint(0, 20, (3,4))   # 3行4列二维数组,随机整数都介于[0,20)
print("由随机整数组成的二维数组:\n",a_randint2)
b_rand=np.random.rand(5)                              # 5个介于[0,1)的随机数一维数组
print("由随机数组成的一维数组:\n",b_rand)
c_randn=np.random.randn(5)                        # 产生5个标准正态分布随机数组成一维数组
print("产生5个标准正态分布随机数组成一维数组:\n",c_randn)
由随机整数组成的一维数组:[ 8  3  7 15 16]
由随机整数组成的二维数组:[[10  2  2  2][14  2 17 16][15  4 11 16]]
由随机数组成的一维数组:[0.56229626 0.00581719 0.30742321 0.95018431 0.12665424]
产生5个标准正态分布随机数组成一维数组:[-0.23198063 -0.51772213  1.43018797  0.94971126  0.65692046]

函数 binomial normal 和不常用函数

函数名称

函数功能

binomial(n, p[, size])

产生二项分布的随机数

poisson([lam, size])

产生泊松分布的随机数

uniform([low, high, size])

产生均匀分布的随机数

exponential([scale, size])

产生指数分布的随机数

normal([loc, scale, size])

产生正态(高斯)分布的随机数

chisquare(df[, size])

产生卡方分布的随机数

f(dfnum, dfden[, size])

产生F分布的随机数

gamma(shape[, scale, size])

产生伽马分布的随机数

import numpy as np            	     #导入numpy模块并命名为 np
import matplotlib.pyplot as plt           #导入绘图模块并命名为plt
mu=1                     #数学期望:1
sigma=3                 #标准差:3
num=1000000      #个数:1000000
rand_data = np.random.normal(mu, sigma, num)    #产生正态分布的随机数
plt.hist(rand_data, 100)                 #绘制直方图
plt.show()                                         #显示图片

 shuffle函数

 shuffle函数功能是将序列类型中的元素随机排列,返回打乱后的序列。对多维数组进行打乱排列时,默认是对第一个维度也就是列维度进行随机打乱

import numpy as np
arr1= np.arange(10)
print("一维数组原顺序:\n",arr1)
np.random.shuffle(arr1)
print("一维数组打乱顺序:\n",arr1)
np.random.seed(100)
arr2=np.arange(1,13).reshape(3,4)
print("二维数组原顺序:\n",arr2)
np.random.shuffle(arr2)
print("二维数组打乱顺序:\n",arr2)
一维数组原顺序:[0 1 2 3 4 5 6 7 8 9]
一维数组打乱顺序:[8 1 4 6 7 2 5 3 0 9]
二维数组原顺序:[[ 1  2  3  4][ 5  6  7  8][ 9 10 11 12]]
二维数组打乱顺序:[[ 5  6  7  8][ 9 10 11 12][ 1  2  3  4]]

numpy多维数组——数组的属性 

属性  .ndim  .shape .szie .dtype .itemszie

属性

说明

.ndim

秩 (rank),即数组轴的数量或者维度的数量

.shape

数组形状,返回一个元组表示各个维度中元素的个数

.size

数组元素的总数

.dtype

数组中每个元素的数据类型和数据大小

.itemsize

数组中每个元素的大小,以字节为单位

.flags

数组的内存信息

.real

数组元素的实部

.imag

数组元素的虚部

import numpy as np
a1 = np.arange(1,13)
print("一维数组a1:{}".format(a1))
print("一维数组a1的维度:{}".format(a1.ndim))
print("一维数组a1的形状:{}".format(a1.shape))
print("一维数组a1的元素个数:{}".format(a1.size))
a2= np.array([[1,2,3],[4,5,6]])
print("二维数组a2:\n{}".format(a2))
print("二维数组a2的维度:{}".format(a2.ndim))
print("二维数组a2的形状:{}".format(a2.shape))
print("二维数组a2的元素个数:{}".format(a2.size))

一维数组a1:[ 1  2  3  4  5  6  7  8  9 10 11 12]
一维数组a1的维度:1
一维数组a1的形状:(12,)
一维数组a1的元素个数:12
二维数组a2:
[[1 2 3][4 5 6]]
二维数组a2的维度:2
二维数组a2的形状:(2, 3)
二维数组a2的元素个数:6Process finished with exit code 0

注意一维形状表示! 

numpy多维数组——数组的变换

数组重塑方法 .reshape  .flatten

方法

说明

.reshape(shape)

不改变数组元素,返回一个shape形状的数组,原数组不变

.flatten()

对数组进行降维,返回折叠后的一维数组,原数组不变

import numpy as np
a1 = np.arange(1,13)     #生成一维数组
print("一维数组a1:\n{}".format(a1))
a2=a1.reshape(3,4)       #将原数组重塑成3行4列的新数组
print("reshape重塑数组生成新数组a2:\n{}".format(a2))
a3=a1.reshape(-1,6)      #将原数组重塑成x行6列的新数组
print("reshape重塑数组生成新数组a3:\n{}".format(a3))
print("原数组a1不变:{}".format(a1))
a4=a3.flatten()          #使用flatten函数把a3中的数据展开成一维数组
print("flatten函数把a3中的数据展开成一维数组a4:\n{}".format(a4))
一维数组a1:
[ 1  2  3  4  5  6  7  8  9 10 11 12]
reshape重塑数组生成新数组a2:
[[ 1  2  3  4][ 5  6  7  8][ 9 10 11 12]]
reshape重塑数组生成新数组a3:
[[ 1  2  3  4  5  6][ 7  8  9 10 11 12]]
原数组a1不变:[ 1  2  3  4  5  6  7  8  9 10 11 12]
flatten函数把a3中的数据展开成一维数组a4:
[ 1  2  3  4  5  6  7  8  9 10 11 12]Process finished with exit code 0

数组合并 .hstack() .vstack() .concatenate((),axis=0/1)

数组的合并是指沿着特定的方向把多个数组合并到一起,numpy使用hstack、vstack和concatenate函数用于实现多个数组的合并。

import numpy as np
#水平合并(左右合并)  要求两个数组的行数一致
A = np.zeros((2, 3), int)
B = np.ones((2, 4), int)
print("A=\n", A)
print("B=\n", B)
print("hstack水平合并:\n", np.hstack((A, B)))
# axis =0垂直,1是水平
print("concatenate水平合并:\n", np.concatenate((A, B), axis=1)) 
A=[[0 0 0][0 0 0]]
B=[[1 1 1 1][1 1 1 1]]
hstack水平合并:[[0 0 0 1 1 1 1][0 0 0 1 1 1 1]]
concatenate水平合并:[[0 0 0 1 1 1 1][0 0 0 1 1 1 1]]

import numpy as np
# 垂直合并(上下合并)  两个数组列数一致
A = np.zeros((2,5), int)
B = np.ones((3, 5), int)
print("A=\n", A)
print("B=\n", B)
print("vstack垂直合并\n", np.vstack((A, B)))
# axis =0垂直,1是水平
print("concatenate垂直合并\n", np.concatenate((A, B), axis=0))
A=[[0 0 0 0 0][0 0 0 0 0]]
B=[[1 1 1 1 1][1 1 1 1 1][1 1 1 1 1]]
vstack垂直合并[[0 0 0 0 0][0 0 0 0 0][1 1 1 1 1][1 1 1 1 1][1 1 1 1 1]]
concatenate垂直合并[[0 0 0 0 0][0 0 0 0 0][1 1 1 1 1][1 1 1 1 1][1 1 1 1 1]]

数组分割 .hsplit() .vsplit() .split()

与数组的合并相反,数组的分割是指沿着特定的方向把一个数组分割为多个小数组, numpy使用hsplit 、vsplit 和split 函数用于实现数组的分割。数组拆分后为list类型。

import numpy as np
arr=np.arange(12).reshape(3,4)
print("原数组:\n",arr)
print("水平分割为:\n",np.hsplit(arr,2))
print("垂直分割为:\n",np.vsplit(arr,3))
#axis=1,水平分割,axis=0,垂直分割
arr_split=np.split(arr,2,axis=1)
print("使用split水平拆分后的新数组:\n",arr_split)
print(type(arr_split))#新数据的数据类型为列表,列表中的元素是分割后的数组
print(type(arr))
原数组:[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
水平分割为:[array([[0, 1],[4, 5],[8, 9]]), array([[ 2,  3],[ 6,  7],[10, 11]])]
垂直分割为:[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
使用split水平拆分后的新数组:[array([[0, 1],[4, 5],[8, 9]]), array([[ 2,  3],[ 6,  7],[10, 11]])]
<class 'list'>
<class 'numpy.ndarray'>Process finished with exit code 0

数组的访问——数组的索引和切片

一维数组的索引和切片

import numpy as np
arr = np.arange(10)
print("原数组:",arr)
print("数组逆序:",arr[::-1])      #逆序
print("数组第3个元素:",arr[2])    #索引访问指定某个元素
print("数组最后一个元素:",arr[-1])
print("数组第3到6个元素:",arr[2:6])#切片访问多个元素
print("数组从第一位元素开始所有元素隔一个取一个:",arr[::2])
原数组: [0 1 2 3 4 5 6 7 8 9]
数组逆序: [9 8 7 6 5 4 3 2 1 0]
数组第3个元素: 2
数组最后一个元素: 9
数组第3到6个元素: [2 3 4 5]
数组从第一位元素开始所有元素隔一个取一个: [0 2 4 6 8]

多维数组的索引和切片

import numpy as np                  #导入模块并命名为 np
np.random.seed(100)                 #同一种子产生的一组随机数是相同的
arr=np.random.randint(0, 50, (4,5))    # 4行5列二维数组,20个随机整数都介于[0,50)
print("原数组:\n",arr)
print("数组第1行第2列元素:",arr[0,1])       #索引访问指定某个元素
print("数组第2,4行元素:\n",arr[[1,3],:])     #索引访问指定某些行元素
print("数组第1,2,3列元素:\n",arr[:,0:3])     #索引访问指定某些列元素
print("从第三行开始,第三列开始的元素:\n",arr[2:,2:])    #索引访问指定某些元素
print("数组最后两行,最后三列元素:\n",arr[-2:,-3:])
原数组:[[ 8 24  3 39 23][15 48 10 30 34][ 2 34 14 34 49][48 24 15 36 43]]
数组第1行第2列元素: 24
数组第2,4行元素:[[15 48 10 30 34][48 24 15 36 43]]
数组第1,2,3列元素:[[ 8 24  3][15 48 10][ 2 34 14][48 24 15]]
数组最后两行,最后三列元素:[[14 34 49][15 36 43]]
数组最后两行,最后三列元素:[[14 34 49][15 36 43]]

数组的访问——修改数组元素的值

函数 。append() .insert() .delete()

可以使用索引和切片的方式直接修改数组中一个或者多个元素的值,也可以使用append、insert函数在原数组的基础上追加或者插入元素并返回新数组,还可以使用delete函数在原数组的基础上删除数组元素并返回新数组。

import numpy as np
arr = np.arange(10)
print("原数组:",arr)
arr1=np.append(arr,88)    #在数组最后追加一个元素88,生成新数组,原数组不变
print("数组追加元素:",arr1)
arr2=np.insert(arr,1,100) #索引为1的位置增加一个元素100,生成新数组,原数组不变
print("数组插入元素:",arr2)
arr3=np.delete(arr,3)     #删除索引为3的数组元素,生成新数组,原数组不变
print("删除索引为3的数组元素:",arr3)
arr[2]=66                 #将数组索引为2的元素修改为66,原数组发生变化
print("修改后数组:",arr)
原数组: [0 1 2 3 4 5 6 7 8 9]
数组追加元素: [ 0  1  2  3  4  5  6  7  8  9 88]
数组插入元素: [  0 100   1   2   3   4   5   6   7   8   9]
删除索引为3的数组元素: [0 1 2 4 5 6 7 8 9]
修改后数组: [ 0  1 66  3  4  5  6  7  8  9]

数组的运算——数组与数组的运算

数组算术运算

在numpy中数组支持与标量的加、减、乘、除、幂等算数运算,不需要通过循环就可以完成批量计算,计算结果为一个新数组,新数组的元素为标量与原数组中每个元素进行计算的结果。

import numpy as np
arr = np.arange(1,6)
print("原数组:",arr)
print("数组与数值相加:",arr+2)
print("数组与数值相减:",arr-2)
print("数组与数值相乘:",arr*2)
print("数组与数值相除:",arr/2)
print("数组与数值幂运算:",arr**2)
print("数组与数值取余:",arr%2)
原数组: [1 2 3 4 5]
数组与数值相加: [3 4 5 6 7]
数组与数值相减: [-1  0  1  2  3]
数组与数值相乘: [ 2  4  6  8 10]
数组与数值相除: [0.5 1.  1.5 2.  2.5]
数组与数值幂运算: [ 1  4  9 16 25]
数组与数值取余: [1 0 1 0 1]

二维数组与一维数组的运算

若两个相同维度的数组进行运算,生成一个新数组,新数组每个元素的值为原来的两个数组中对应位置上的元素进行运算的结果。若两个数组维度不同时,若符合广播要求则进行广播,否则就报错并结束运行。

import numpy as np
A = np.arange(1,13).reshape(4,3)    #4行3列数组
B = np.array([3])                             #1行1列数组 
C= A+B
print("{}+{}=\n{}".format(A,B,C))
[[ 1  2  3][ 4  5  6][ 7  8  9][10 11 12]]+[3]=
[[ 4  5  6][ 7  8  9][10 11 12][13 14 15]]

import numpy as np
A = np.arange(1,13).reshape(4,3)  #4行3列数组
B = np.array([2,1,3])             #1行3列数组  
C= A-B
print("{}-{}=\n{}".format(A,B,C))
[[ 1  2  3][ 4  5  6][ 7  8  9][10 11 12]]-[2 1 3]=
[[-1  1  0][ 2  4  3][ 5  7  6][ 8 10  9]]

二维数组与二维数组的运算

import numpy as np
A = np.arange(1,13).reshape(4,3)       #4行3列数组
B = np.array([[4],[5],[-2],[2]])       #4行1列数组
C= A*B
print("{}×\n{}=\n{}".format(A,B,C))
[[ 1  2  3][ 4  5  6][ 7  8  9][10 11 12]]×
[[ 4][ 5][-2][ 2]]=
[[  4   8  12][ 20  25  30][-14 -16 -18][ 20  22  24]]

数组的运算——条件逻辑运算

数组的布尔运算:在numpy中可以使用基本的关系运算实现数组的条件运算,返回包含若干True/False的数组

True/False的数组

import numpy as np
np.random.seed(100)
arr = np.random.randint(1,21,10)
print("原数组:",arr)
print("判断数组中的元素是否大于 10:",arr>10)
print("数组中大于10的元素:",arr[arr>10])
print("统计数组中5~15的元素总数:",sum((arr>5)&(arr<15)))
print("是否都大于3:",np.all(arr>3))
print("是否有元素小于5:",np.any(arr<5))
原数组: [ 9  4  8 16 17 11  3  3  3 15]
判断数组中的元素是否大于 10: [False False False  True  True  True False False False  True]
数组中大于10的元素: [16 17 11 15]
统计数组中5~15的元素总数: 3
是否都大于3: False
是否有元素小于5: True

where用法

import numpy as np
arr = np.array([8,5,4,6,1,3,9,7])
print("原数组:",arr)
print("数组中大于5的元素对应1,其他对应0:",np.where(arr > 5 ,1,0))
print("数组中大于5的元素的索引:",np.where(arr>5))
print("数组中大于5的元素:",arr[np.where(arr>5)])
原数组: [8 5 4 6 1 3 9 7]
数组中大于5的元素对应1,其他对应0: [1 0 0 1 0 0 1 1]
数组中大于5的元素的索引: (array([0, 3, 6, 7], dtype=int64),)
数组中大于5的元素: [8 6 9 7]

 布尔型索引

将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组

import numpy as np                  #导入模块并命名为 np
np.random.seed(100)                 #同一种子产生的一组随机数是相同的
arr=np.random.randint(0, 50, 10)    # 生成10个随机整数都介于[0,50)的一维数组
print("原数组:",arr)
print("数组大于20:",arr>20)
print("数组中大于20的元素:",arr[arr>20])
print("数组中大于20的奇数元素:",arr[(arr>20) & (arr%2!=0)])
原数组: [ 8 24  3 39 23 15 48 10 30 34]
数组大于20: [False  True False  True  True False  True False  True  True]
数组中大于20的元素: [24 39 23 48 30 34]
数组中大于20的奇数元素: [39 23]

数组的运算——numpy库常用的数学函数运算

函数 ceil() floor() round() exp().....

函数

功能

sqrt(array)

平方根函数

exp(array)

e^array[i]的数组

abs(array)

计算绝对值

square(array)

计算各元素的平方,等于array**2

log/log10/log2(array)

计算各元素的各种对数

sign(array)

计算各元素正负号

ceil(array)

向上取整,也就是取比这个数大的整数

floor(array)

向下取整,也就是取比这个数小的整数

round(array)

四舍五入

sin(array)

正弦值

cos(array)

余弦值

tan(array)

正切值

import numpy as np
import numpy as np
#通过乘 pi/180 转化为弧度
arr = np.array([0, 30, 45, 60, 90])* np.pi / 180
print('数组中不同角度的正弦值:\n',np.sin(arr))
print('数组中不同角度的余弦值:\n',np.cos(arr))
print('数组中不同角度的正切值:\n',np.tan(arr))arr2=np.array([0,12,8,6.6,0.5,-2,-0.1,-0.6,-1.1])
print('e^array[i]的数组:\n',np.exp(arr2))
print('四舍五入(实则五舍六入):\n',np.round(arr2))
print('计算各元素的平方,等于array**2:\n',np.square(arr2))
print('计算各元素正负号:\n',np.sign(arr2))
print('向下取整,也就是取比这个数小的整数:\n',np.floor(arr2))
数组中不同角度的正弦值:[0.         0.5        0.70710678 0.8660254  1.        ]
数组中不同角度的余弦值:[1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-016.12323400e-17]
数组中不同角度的正切值:[0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+001.63312394e+16]
e^array[i]的数组:[1.00000000e+00 1.62754791e+05 2.98095799e+03 7.35095189e+021.64872127e+00 1.35335283e-01 9.04837418e-01 5.48811636e-013.32871084e-01]
四舍五入(实则五舍六入):[ 0. 12.  8.  7.  0. -2. -0. -1. -1.]
计算各元素的平方,等于array**2:[0.000e+00 1.440e+02 6.400e+01 4.356e+01 2.500e-01 4.000e+00 1.000e-023.600e-01 1.210e+00]
计算各元素正负号:[ 0.  1.  1.  1.  1. -1. -1. -1. -1.]
向下取整,也就是取比这个数小的整数:[ 0. 12.  8.  6.  0. -2. -1. -1. -2.]

numpy中的数据统计与分析

排序 sort() argsort()

sort函数语法格式:np.sort(a, axis, kind, order)

参数说明:a:要排序的数组;axis:排序沿着指定轴对数组进行排序,0表示按行排序,1表示按列排序;

sort方法语法格式:a.sort()

功能:对数组a排序,改变原始数组,无返回值。

mport numpy as np
np.random.seed(100)
a=np.random.randint(10,100,12)
print("原数组a:",a)
print("使用sort函数排序结果:",np.sort(a)) #对数组排序,不改变原数组
print("原数组a不变:",a)
b=a.reshape(4,3)                #将a变形为4行3列数组b
print("二维数组b:\n",b)
print("二维数组b按行排序:\n",np.sort(b,axis=1))#axis =0垂直,1是水平
print("二维数组b按列排序:\n",np.sort(b,axis=0))
a.sort()     #改变原数组 ,无返回值                  
print("使用sort方法对数组a排序后改变原数组:",a)
原数组a: [18 34 77 97 89 58 20 62 63 76 24 44]
使用sort函数排序结果: [18 20 24 34 44 58 62 63 76 77 89 97]
原数组a不变: [18 34 77 97 89 58 20 62 63 76 24 44]
二维数组b:[[18 34 77][97 89 58][20 62 63][76 24 44]]
二维数组b按行排序:[[18 34 77][58 89 97][20 62 63][24 44 76]]
二维数组b按列排序:[[18 24 44][20 34 58][76 62 63][97 89 77]]
使用sort方法对数组a排序后改变原数组: [18 20 24 34 44 58 62 63 76 77 89 97]Process finished with exit code 0

argsort函数语法格式:np.argsort(a, axis, kind, order)

功能:对数组a排序,返回一个由整数构成的索引数组

import numpy as np
a=np.array([4,2,6])
print("原数组a:",a)
print("排序后:",np.argsort(a)) #原数组中索引为1的元素最小,索引为0的元素次之,索引为2的元素最大
原数组a: [4 2 6]
排序后: [1 0 2]

数据去重与重复 去重unique()  重复tile() repeat()

通过unique函数可以找出数组中的唯一值并返回已经排序的结果。

import numpy as np
colors=np.array(['red','blue','yellow','white','blue'])
print("原数组:",colors)
print("去重后的数组:",np.unique(colors))
原数组: ['red' 'blue' 'yellow' 'white' 'blue']
去重后的数组: ['blue' 'red' 'white' 'yellow']

 tile函数语法格式:np.tile(A, reps)

repeat函数语法格式:np.repeat(A, reps, axis=None)

import numpy as np
arr = np.arange(5)
print("原数组:",arr)
arr1 = np.tile(arr,3)
print("原数组重复3次:",arr1)
arr2=np.arange(9).reshape(3,3)    #3行3列二维数组
print("二维数组:\n",arr2)
arr3 = np.repeat(arr2,2,axis=0)   #按行重复
print("二维数组按行重复2次:\n",arr3)
#axis =0垂直,1是水平
原数组: [0 1 2 3 4]
原数组重复3次: [0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
二维数组:[[0 1 2][3 4 5][6 7 8]]
二维数组按行重复2次:[[0 1 2][0 1 2][3 4 5][3 4 5][6 7 8][6 7 8]]

常用统计函数 最大值、最小值、平均值、中值

计算数组的和、最大值、最小值

函数

功能

sum(a, axis)

计算数组中的元素沿指定轴的和

min(a, axis)

计算数组中的元素沿指定轴的最小值。

argmin(a, axis)

计算数组中的元素最小值的索引

max(a, axis)

计算数组中的元素沿指定轴的最大值

argmax(a, axis)

计算数组中的元素最大值的索引

import numpy as np
np.random.seed(10)
arr = np.random.randint(0,20,9).reshape(3,3)     #3行3列数组
print("原数组:\n",arr)
print("数组全部元素求和:",np.sum(arr))
print("数组按行求最大值:",np.max(arr,axis=1))
print("数组按行求最大值索引:",np.argmax(arr,axis=1))
print("数组按列求最小值:",np.min(arr,axis=0))
print("数组按列求最小值索引:",np.argmin(arr,axis=0))
原数组:[[ 9  4 15][ 0 17 16][17  8  9]]
数组全部元素求和: 95
数组按行求最大值: [15 17 17]
数组按行求最大值索引: [2 1 0]
数组按列求最小值: [0 4 9]
数组按列求最小值索引: [1 0 2]Process finished with exit code 0

计算数组均值、中值

函数

功能

median(a, axis)

沿指定轴计算数组中元素的中值

mean(a, axis)

沿指定轴计算数组中元素的平均值

import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
print("原数组:\n",arr)
print("数组全部元素的平均值",np.mean(arr))
print("数组按行求平均值:",np.mean(arr,axis=1))
print("数组按列求平均值:",np.mean(arr,axis=0))
print("数组全部元素的中值",np.median(arr))
print("数组按行求中值:",np.median(arr,axis=1))
print("数组按列求中值:",np.median(arr,axis=0))
C:\python\Python310\python.exe A:/PycharmProjects/pythonProject/NumpyStudy.py
原数组:[[1 2 3][4 5 6]]
数组全部元素的平均值 3.5
数组按行求平均值: [2. 5.]
数组按列求平均值: [2.5 3.5 4.5]
数组全部元素的中值 3.5
数组按行求中值: [2. 5.]
数组按列求中值: [2.5 3.5 4.5]Process finished with exit code 0

计算数组方差、标准差、协方差矩阵

函数

功能

std(a, axis,ddof=1)

计算数组的标准差

var(a, axis,ddof=1)

计算数组的方差,标准差是方差的平方根

cov(a) 

计算协方差矩阵


import numpy as np
np.random.seed(10)
arr = np.random.randint(0,50,20).reshape(2,10)       #2行10列数组
print("原数组:\n",arr)
print("数组全部元素的方差",np.var(arr)) 
print("数组全部元素的无偏方差",np.var(arr,ddof=1)) 
print("数组按行求无偏方差:",np.var(arr,axis=1,ddof=1)) 
print("数组按列求方差:",np.var(arr,axis=0)) 
print("数组协方差矩阵:\n",np.cov(arr)) # 默认行为变量计算方式
C:\python\Python310\python.exe A:/PycharmProjects/pythonProject/NumpyStudy.py
原数组:[[ 9 36 15  0 49 28 25 29 48 29][49  8  9  0 42 40 36 16 36 47]]
数组全部元素的方差 259.24750000000006
数组全部元素的无偏方差 272.89210526315793
数组按行求无偏方差: [246.17777778 328.67777778]
数组按列求方差: [400.   196.     9.     0.    12.25  36.    30.25  42.25  36.    81.  ]
数组协方差矩阵:[[246.17777778 101.4       ][101.4        328.67777778]]Process finished with exit code 0

计算数组的百分位数

函数的语法格式:percentile(a, q, axis)

参数说明:

  1. a: 输入数组;
  2. q: 要计算的百分比的数字,该数字在 0 ~ 100 之间;
  3. axis: 沿着它计算百分位数的轴。
import numpy as np
np.random.seed(10)
arr = np.random.randint(0,50,10)     
print("原数组:",arr)
print("数组的平均值",np.mean(arr))
print("数组的中值",np.median(arr))
print("数组的百分位为50的值:",np.percentile(arr,50)) 
print("数组的百分位为0,25,50,75,100的值:",np.percentile(arr,[0,25,50,75,100]))
C:\python\Python310\python.exe A:/PycharmProjects/pythonProject/NumpyStudy.py
原数组: [ 9 36 15  0 49 28 25 29 48 29]
数组的平均值 26.8
数组的中值 28.5
数组的百分位为50的值: 28.5
数组的百分位为0,25,50,75,100的值: [ 0.   17.5  28.5  34.25 49.  ]Process finished with exit code 0

求解线性方程组——数组与矩阵

数组ndarray和矩阵matrix

numpy库包含了两种基本类型:数组ndarray和矩阵matrix。 numpy数组中所有元素的类型必须是相同的,矩阵matrix必须是二维的,是特殊的数组。matrix 拥有array的所有特性, matrix的主要优势是:相对简单的乘法运算符号。

import numpy as np
A_mat = np.mat([[1, 2],[3, 4]], int)  #创建矩阵
A_array = np.array([[1, 2],[3, 4]])   #创建二维数组
print("A_mat矩阵:\n",A_mat)
print("A_mat矩阵的类型:",type(A_mat))
print("A_array二维数组:\n",A_array)
print("A_array二维数组的类型:",type(A_array))
C:\python\Python310\python.exe A:/PycharmProjects/pythonProject/NumpyStudy.py
A_mat矩阵:[[1 2][3 4]]
A_mat矩阵的类型: <class 'numpy.matrix'>
A_array二维数组:[[1 2][3 4]]
A_array二维数组的类型: <class 'numpy.ndarray'>Process finished with exit code 0

矩阵和数组的点乘运算

矩阵和数组的点乘运算有点不同:当采用 * 符号进行运算时,矩阵可以实现点乘运算,而数组的运算结果是对应元素的乘积;在调用 dot 函数时矩阵和数组均可实现点乘运算。dot 函数为矩阵乘法,该函数功能:若为一维数组,求出内积;若为二维数组,则进行矩阵乘法。矩阵乘法的第一个矩阵的列数(column)和第二个矩阵的行数(row)必须相同。

import numpy as np
A_mat = np.mat([[1, 2],[3, 4]], int)  #2×2矩阵
B_mat = np.mat([[1],[2]], int)        #2×1矩阵
print("A_mat*B_mat=\n",A_mat*B_mat)
print("dot函数矩阵计算结果:\n",np.dot(A_mat,B_mat))
A_array = np.array([[1, 2],[3, 4]])   #2×2二维数组
B_array = np.array([[1],[2]])         #2×1二维数组
print("A_array*B_array=\n",A_array*B_array)
print("dot函数数组计算结果:\n",np.dot(A_array,B_array))
C:\python\Python310\python.exe A:/PycharmProjects/pythonProject/NumpyStudy.py
A_mat*B_mat=[[ 5][11]]
dot函数矩阵计算结果:[[ 5][11]]
A_array*B_array=[[1 2][6 8]]
dot函数数组计算结果:[[ 5][11]]Process finished with exit code 0

求解线性方程组 

 方法一:

import numpy as np
A_mat = np.mat([[2,1, -5, 1], [1,-3, 0, -6], [0,2, -1,2],[1,4,-7,6]], int)
b_mat = np.mat([[8], [6], [-2],[2]], int)
x = np.linalg.solve(A_mat, b_mat)
print("线性方程组的解:\n",x)
线性方程组的解:[[ 4.        ][-1.55555556][-0.22222222][ 0.44444444]]

方法二:

import numpy as np
A_array = np.array([[2,1, -5, 1], [1,-3, 0, -6], [0,2, -1,2],[1,4,-7,6]])
b_array = np.array([[8], [6], [-2],[2]])
x = np.linalg.solve(A_array, b_array)
print("线性方程组的解:\n",x)
线性方程组的解:[[ 4.        ][-1.55555556][-0.22222222][ 0.44444444]]


http://chatgpt.dhexx.cn/article/me1VRRpV.shtml

相关文章

python的 numpy库学习总结和介绍(超详细)模块

目录 前言 numpy是什么&#xff1f; 一、创建数据容器 1.np.array(),通过传递一个列表&#xff0c;元祖来创建 2.np.zeros(),np.ones(),np.empty(),np.full(),传递对应的形状参数&#xff0c;来创建一个初始化的数组 3.np.linspace()与np.arange()的使用 4.运用np.random…

Python库-numpy详解

Python库-numpy详解 1. ndarray介绍2. ndarray的基本操作生成数组数组索引、切片修改数组形状修改数组类型数组去重删除元素 3. ndarray运算逻辑运算通用判断函数三元运算符统计运算数组运算 4. matrix 矩阵介绍5. Python中矩阵运算扩展&#xff1a;正态分布简介正态分布图方差…

python numpy库

文章目录 NumPy( Numeric Python)numpy的引用Ndarray引入n维数组的意义ndarray的组成ndarray对象的属性 数据类型ndarray支持多种数据类型的原因ndarray数组的创建adarray数组的变换ndarray数组运算 索引与切片随机数函数统计函数梯度函数副本与视图numpy线性代数数组与标量之间…

python-numpy库

目录 ndarray对象 arange函数 array函数 random函数 其他创建数组方法 切片和索引及修改数组维度 数组的拼接 数组的分割 数组的转置 数组的运算 numpy(Numerical Python)是科学计算基础库&#xff0c;提供大量科学计算相关功能&#xff0c;比如数据统计&#xff0c;…

Python中的numpy库介绍!

机器学习算法中大部分都是调用Numpy库来完成基础数值计算的。 安装方法&#xff1a; pip3 install numpy1. ndarray数组基础 python中用列表保存一组值&#xff0c;可将列表当数组使用。另外&#xff0c;python中有array模块&#xff0c;但它不支持多维数组&#xff0c;无论是…

NumPy库的介绍与使用(一)

目录 一、NumPy库简介二、NumPy库入门1.数据的维度2.安装NumPy3.导入NumPy库 三、NumPy的数组对象&#xff1a;ndarray1 为什么要引入ndarry呢&#xff1f;2. ndarray是一个多维数组对象2.1 定义2.2 内存中的存储形式2.3 ndarray对象的属性2.4 ndarray数组的元素类型 3. ndarra…

Numpy库的介绍及使用

Numpy库的介绍及使用 1. Numpy库入门1.1 数据的维度1.2 ndarray的优势1.3 ndarray对象的属性1.4 ndarray数组的创建和变换1.4.1 ndarray数组的创建方法1.4.2 ndarray数组维度的变换 1.5 ndarray数组的索引和切片1.6 ndarray数组的运算 2. 数据存取与函数2.1 CSV存取数据2.2 多维…

numpy库的安装方法

安装numpy库的方法 winR&#xff0c;输入cmd&#xff0c;打开cmd 在cmd中输入pip install numpy&#xff0c;回车 输入pip list&#xff0c;查看numpy是否安装成功 4.在cmd中输入python&#xff0c;回车&#xff0c;在输入import numpy&#xff0c; 验证numpy库是否可以被调…

Numpy库的安装

Numpy库的安装 一、numpy简介 NumPy是一个功能强大的Python库&#xff0c;主要用于对多维数组执行计算。NumPy提供了大量的库函数和操作&#xff0c;可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务&#xff1a; **机器学习模型&#xff1a;**在编写机器学…

numpy库的一些解释

Numpy库介绍 NumPy是一个的Python库&#xff0c;主要用于对多维数组执行计算。 NumPy这个词来源于两个单词-- Numerical [njuːˈmerɪkl] &#xff08;数值;数值法;数值的;数字的&#xff09;和 Python。主要用来进行数值计算。 有以下几个特点: 1.numpy内置了并行运算功能&a…

Numpy库

Numpy库入门 一维数据&#xff1a;由对等关系的有序或无序数据构成&#xff0c;采用线性方式组织。 二维数据由多个一维数据构成&#xff0c;是一维数据的组合形式。&#xff08;表格&#xff09; 多维数据由一维或二维数据在新维度上扩展形成。 Numpy:开源的Python科学计算…

Python Numpy库的超详细介绍

Numpy库是Python中的一个科学计算库,本文主要介绍了ndarray的基本操作、 ndarray运算等各种Numpy库的超详细教程,需要的朋友可以参考下 1、Numpy概述 1.1 概念 Python本身含有列表和数组&#xff0c;但对于大数据来说&#xff0c;这些结构是有很多不足的。由于列表的元素可以…

python进阶--Numyp库(一)

一、Numpy库介绍 NumPy&#xff08;Numerical Python&#xff09;是Python的⼀种开源的数值计算扩展。提供多维数组对象&#xff0c;各种派⽣对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;这种⼯具可⽤来存储和处理⼤型矩阵&#xff0c;⽐Python⾃身的嵌套列表&am…

解决端口8080被占用的问题!

今天在回顾cms项目的时候发现怎么都启动不了&#xff0c;看见左下角报错 原来是8080端口被别的进程占用了。 解决方法&#xff1a;winr cmd 回车 在命令窗口中 输入netstat -ano就可以查看所有端口显示的状态信息 找到这个本地地址是0.0.0.0:8080最后面的PID&#xff0c;就是…

8080端口被占用怎么办

做项目时肯定会遇到8080端口被占用的情况&#xff0c;其实解决办法很简单&#xff1a; CtrlR键&#xff0c;输入cmd: 复制这串代码到cmd界面&#xff1a; netstat -aon|findstr "8080" 可以看到8080确实被占用了&#xff1a; 把后面的都终止掉&#xff…

解决localhost:8080被占用

解决方法如下&#xff1a; 1.以管理员方式打开CMD&#xff0c;我的电脑——c盘——windows——system32——CMD.exe——右键管理员身份打开 1.在cmd里输入netstat -ano|findstr 8080&#xff0c;查看是哪个进程占用了8080端口。 2.输入taskkill /pid 11904 /f&#xff0c;结束…

解决SpringBoot默认Tomcat端口号8080被占用

问题描述&#xff1a; 打开Eclipse后启动SpringBoot项目&#xff0c;发现8080端口被占用。然后寻找Eclipse是否有未关闭的Tomcat项目&#xff0c;发现并没有&#xff0c;重启Eclipse仍然会出现端口占用的请况。 给出的错误信息显示。 Description: The Tomcat connector co…

解决tomcat端口8080被占用

1、eclipse启动tomcat时8080端口被占用&#xff1a; 2、打开CMD&#xff1a; 命令查找正在使用8080端口的进程&#xff0c; netstat -ano|findstr 8080 杀死该进程&#xff0c; taskkill /pid 117800 /f 命令说明&#xff1a;taskkill /pid 117800&#xff08;进程id号&am…

idea报8080端口被占用解决

1错误提示 Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port. 2原因 这是因为我们某个程序占用了8080端口&#xff0c;有可能是我们以前某个项目没有正确暂停导致。 3解决 1&#xff1a;打开cmd窗…

Tomcat 8080 端口被占用解决方案

1. 报错记录 原因&#xff1a;端口号8080被其他应用程序占用 2. 解决方案 方案一&#xff1a;结束占用端口程序 在Windows控制台中输入下面内容查询占用8080端口的进程id netstat -ano|findstr "8080" ctrlshiftesc打开任务管理器&#xff0c;在服务通过pid找到占用程…