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

news2024/11/16 3:12:33

 目录

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的元素个数:6

Process 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-01
 6.12323400e-17]
数组中不同角度的正切值:
 [0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
 1.63312394e+16]
e^array[i]的数组:
 [1.00000000e+00 1.62754791e+05 2.98095799e+03 7.35095189e+02
 1.64872127e+00 1.35335283e-01 9.04837418e-01 5.48811636e-01
 3.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-02
 3.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://www.coloradmin.cn/o/1634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法篇-搜索与图论】适合算法入门小白理解的深度优先搜索(DFS )以及解决全排列数字

目录1.什么是深度优先搜索&#xff08;DFS&#xff09;2.结合例子看DFS2.1 全排列数字结语该文章部分内容摘抄自 啊哈磊老师的《啊哈&#xff01;算法》 一本对算法新手非常友好的书&#xff0c;非常推荐新手去阅读&#xff01; 1.什么是深度优先搜索&#xff08;DFS&#xff0…

【阿里云】短信服务

目录 1. 前置技术&#xff1a;阿里大鱼 1.1 概述 1.2 开通 1.3 签名管理 1.3.1 签名概述 1.3.2 添加签名 1.3.3 使用 1.4 模板管理 1.4.1 模板概述 1.4.2 添加模板 1.4.3 使用 1.5 在线文档 1.5.1 打开在线文档 1.5.2 使用在线文档 1.6 使用工具类发送短信 1.7…

基于混合VNS(变邻域搜索算法)的PSO(粒子群优化算法)的任务分配问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(3)

文章目录1.读取本的数据集2.查看数据的前5行3.将salary列的数据转换为最大值和最小值的平均值4.将数据根据学历进行分组计算平均值5.将createTime列转换为月日6.查看所索引&#xff0c;数据类型和内存信息7.查看数值型列的汇总统计8.新增一列根据salary将数据分为三组9.按照sal…

【Day31】力扣算法(超详细思路+注释)[1441. 用栈操作构建数组 ] [621. 任务调度器]

您的点赞&#xff0c;收藏以及关注是对作者最大的鼓励喔 ~~ 刷题打卡&#xff0c;第 三十一 天题目一、1441. 用栈操作构建数组题目二、621. 任务调度器题目一、1441. 用栈操作构建数组 原题链接&#xff1a;1441. 用栈操作构建数组 题目描述&#xff1a; 给你一个数组targe…

5 个 Flutter VSCode 技巧和窍门,你可以马上使用!

5 个 Flutter VSCode 技巧和窍门&#xff0c;你可以马上使用&#xff01; 前言 今天&#xff0c;我将向你展示 5 个非常有用的 Flutter 技巧&#xff0c;你可以立即应用到你的项目中。我不会给你任何软件包或扩展&#xff0c;但非常简单&#xff0c;但非常有用的技巧&#xff0…

【大厂高频真题100题】单词拆分 真题练习第7题 持续更新~

单词拆分 描述: 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s = "leetcode", wordDict = ["leet&q…

德邦股份第三季营收80亿:净利2.56亿 京东控制72%股权

雷递网 雷建平 10月28日德邦物流股份有限公司&#xff08;证券代码&#xff1a;603056&#xff0c;证券简称&#xff1a;德邦股份&#xff09;今日发布财报。财报显示&#xff0c;德邦股份2022年前9个月营收为228.17亿元&#xff0c;较上年同期增长1.14%&#xff1b;净利为3.5亿…

springboot+jsp志愿者岗位报名培训系统javaweb

当我知道北京冬奥会申请成功&#xff0c;也刚好是我的毕业&#xff0c;觉得自已需要做点什么&#xff0c;北京冬奥会申请成功觉得自已去做一个志愿者&#xff0c;这样不断丰富了自已的经历&#xff0c;还能给自已在现实生活中上了一课&#xff0c;为了迎合志愿者需求&#xff0…

每日学习06:=和== 和 equals 你学废了吗?

1.赋值运算符 &#xff1a;是赋值运算符。赋是指为变量或常量指定数值的符号。赋值运算符的符号为“”&#xff0c;它是双目运算符&#xff0c;左边的操作数必须是变量&#xff0c;不能是常量或表达式。 赋值运算符的优先级低于算术运算符&#xff0c;结合方向是自右向左&…

Python基础_第4章_Python数据序列(容器)

Python基础_第4章_Python数据序列&#xff08;容器&#xff09; 文章目录Python基础_第4章_Python数据序列&#xff08;容器&#xff09;Python数据序列&#xff08;容器&#xff09;一、作业回顾1、面试题2、报数字&#xff08;数7&#xff09;二、了解字符串1、字符串的定义2…

蓝桥杯备赛(二)

目录 前言&#xff1a; 一、ASC 分析 代码实现 二、 卡片 分析 代码实现 三、 直线 分析 代码实现 四、货物摆放 分析 代码实现 小结&#xff1a; 前言&#xff1a; 在刷题的过程中&#xff0c;发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉&#xff…

【IO】文件操作基础知识

目录 1.文件的操作&#xff1a; 2.文件内容的读写—数据流&#xff1a; 3.文件操作练习&#xff1a; 1.文件的操作&#xff1a; 文件分为狭义上的文件和广义的文件。狭义上的文件&#xff1a;存储在硬盘上的数据&#xff0c;以“文件”为单位进行组织。文件夹也叫做目录。通…

图第三遍补充(各种算法与力扣)

一、一些补充的概念 如果具有n个结点的图中是一个环&#xff0c;则会有n个不同的生成树&#xff0c;每个生成树有n-1条边 连通、连通图、连通分量&#xff1a;路径&#xff0c;无向图 &#xff0c;极大连通子图为连通分量&#xff0c;边数小于n-1&#xff0c;则图必为非连通图…

Xilinx XC7Z020双核ARM+FPGA开发板试用合集——自定义硬件工程

本期测试板卡是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板,处理器集成PS端双核ARM Cortex-A9 + PL端Artix-7架构28nm可编程逻辑资源。 下面是测试内容,欢迎查阅。 SD卡启动设置 根据《TLZ7x-EasyEVM-S评估板硬件说明书》…

开心消消乐游戏网页设计作品 学生dreamweaver作业静态HTML网页设计模板 游戏主题网页作业制作

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

有营养的算法笔记(八)

有营养的算法笔记八摆砖块问题数字转换K递增子序列魔法子数组摆砖块问题 1.题目描述 给定一个正数数组arr&#xff0c;其中每个值代表砖块长度。所有砖块等高等宽&#xff0c;只有长度有区别&#xff0c;每一层可以用1块或者2块砖来摆。要求每一层的长度一样 要求必须使用所有…

【阅读笔记】低照度图像增强-《An Integrated Neighborhood Dependent...

本文介绍的是一种比较实用的低照度图像增强算法&#xff0c;选自2004年Tao的一篇论文&#xff0c;名称是《An Integrated Neighborhood Dependent Approach for Nonlinear Enhancement of Color Images 》 概述 图像中暗区图像增强的基本机制是对图像的亮度进行动态范围压缩&…

玩转rancher 2.6之 monitor监控

目录 前言 1. 安装monitor 2. 安装prometheus-webhook-dingtalk 2.1 配置钉钉告警配置文件 2.2 创建钉钉告警模板 2.3 创建dingtalk configmap配置文件 2.4 安装dingtalk 2.5 dingtalk调用方法 3. 配置告警 3.1 配置告警接收者 3.2 配置路由默认告警接收者 4. 测试 前…

初识C++ (三)

初识C 三引用一. 引用的概念代码演示二. 引用特性1. 引用在定义时必须要初始化2. 一个引用可以有多个实体3. 引用一旦引用一个实体&#xff0c;再不能引用其他实体三. 使用场景1. 做参数2. 做返回值内存销毁后空间还在吗&#xff1f;内存销毁后我们还能访问嘛&#xff1f;结论优…