目录
什么是NumPy
NumPy使用
1.数组的创建
2.类型转换
3.赠删改查
4.数组运算
5.矩阵运算
什么是NumPy
1.NumPy操作的是多维数组,什么是纬度?
NumPy使用
1. 安装
pip install numpy
import numpy as np
2.官网:
中文官网:numpy.org.cn
1.数组的创建
1.创建一个一维数组:array
import numpy as np#创建一个一维数组
d1=np.array([1,2,3,4,5])
print(d1)
#查看size
print(d1.size)
#查看type
print(type(d1))
#查看数据维度
print(d1.ndim)
out:
[1 2 3 4 5]
5
<class 'numpy.ndarray'>
1
2.创建一个二维数组:arnge
#创建一个二维数组
d2=np.arange(15)
print(d2)
#增加行,列维度
d2=d2.reshape(3,5)
print(d2)
out:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
3.创建全为0或1的数组
# 创建全为0的数组
d3 = np.zeros(15)
d3 = d3.reshape(3, 5)
print(d3)d4 = np.ones(15)
d4 = d4.reshape(3, 5)
print(d4)
out
[[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.]]
4.empty,创建新数组,只分配内存空间,不填充任何值
d5 = np.empty(([1,2,3]))
print(d5)
2.类型转换
numpy会自动根据传入类型设置数据类型
1. 数组转np数组
# 数组转为np数组
data = [[1, 2, 3, 4], [5, 6, 7, 8]]
print(type(data))
d1 = np.array(data)
print(d1)
print(type(d1))
out:
<class 'list'>
[[1 2 3 4]
[5 6 7 8]]
<class 'numpy.ndarray'>
2.dtype识别数据类型
d4 = np.ones(15)
d4 = d4.reshape(3, 5)
print(d4.dtype)
out:float64
3.创建时指定数据类型
d4 = np.arange(15,dtype=np.float64)
d4 = d4.reshape(3, 5)
print(d4)print(d4.dtype)
4.对ndarray进行数据类型转换,astype
data4.astype(np.float64)
3.赠删改查
1.索引
#一维数组索引获取数据 d1=np.arange(15) print(d1) print("获取第一个:",d1[0]) print("获取最后一个:",d1[-1])#二维数组 d2=np.arange(15).reshape(3,5) print(d2) print("获取第一行第一列,方法1:",d2[0,0]) print("获取第一行第一列,方法2:",d2[0][0]) print("获取倒数第一行第一列,方法1:",d2[-1,-1]) print("获取倒数第一行第一列,方法2:",d2[-1][-1])#三维数组 d2=np.arange(30).reshape(3,5,2) print(d2) print("获取第一行第一列第一个,方法1:",d2[0,0,0]) print("获取第一行第一列第一个,方法2:",d2[0][0][0]) print("获取倒数第一行第一列第一个,方法1:",d2[-1,-1,-1]) print("获取倒数第一行第一列第一个,方法2:",d2[-1][-1][-1])[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
获取第一个: 0
获取最后一个: 14
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
获取第一行第一列,方法1: 0
获取第一行第一列,方法2: 0
获取倒数第一行第一列,方法1: 14
获取倒数第一行第一列,方法2: 14
[[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]][[10 11]
[12 13]
[14 15]
[16 17]
[18 19]][[20 21]
[22 23]
[24 25]
[26 27]
[28 29]]]
获取第一行第一列第一个,方法1: 0
获取第一行第一列第一个,方法2: 0
获取倒数第一行第一列第一个,方法1: 29
获取倒数第一行第一列第一个,方法2: 29
2.索引
#一维数组切片 d1=np.arange(15) print("===",d1[0:3]) #截取包含起始下标到不包含结尾的数据 print("===",d1[:-1]) #截取全部#二维数组切片 d2=np.arange(15).reshape(3,5) print("===",d2[0:1,:]) #行参数,列参数 print("===",d2[:,3:4]) #获取全部行,中3列的数据#三维数组 d3=np.arange(30).reshape(3,5,2) print("===",d3) print("===",d3[0:1,2:,:]) #行参数,列参数,三维参数#根据索引获取数据 #一维数组 print("===",d1[np.array([0,2,4])])print("===",d2[np.array([0,2]),np.array([1,2])])
=== [0 1 2]
=== [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13]
=== [[0 1 2 3 4]]
=== [[ 3]
[ 8]
[13]]
=== [[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]]
[[10 11]
[12 13]
[14 15]
[16 17]
[18 19]]
[[20 21]
[22 23]
[24 25]
[26 27]
[28 29]]]
=== [[[4 5]
[6 7]
[8 9]]]
=== [0 2 4]
=== [ 1 12]
4.数组运算
1. 算数运算
import numpy as np#算数运算 a= np.random.random(10000)*10 b= np.random.random(10000)*10 #加法 print("加法:",np.add(a,b)) print("减法:",np.subtract(a,b)) print("除法:",np.divide(a,b)) print("乘法:",np.multiply(a,b))加法: [13.06866571 6.26206256 7.44861655 ... 12.38302847 13.97542329
11.69602862]
减法: [-1.04377832 4.84747125 2.0907946 ... -5.08931599 -0.78999914
7.99437207]
除法: [0.85207689 7.85352893 1.78046438 ... 0.41744326 0.89299336 5.31934836]
乘法: [42.42513755 3.92886251 12.77761661 ... 31.85956422 48.67208937
18.22177516]
2.数学函数
如:sin, 更多函数请看官方文档
#数学三角函数 ang=np.array([0,30,45,60,90,120,135,150,180]) rad=np.sin(ang*np.pi/180) print(rad)[0.00000000e+00 5.00000000e-01 7.07106781e-01 8.66025404e-01
1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
1.22464680e-16]
3.统计函数
# 统计函数 d2 = np.array([1, 2, 3, 4, 5]) print("平均值mean:", np.mean(d2)) print("平均值average:", np.average(d2)) print("平均值,加权:", np.average(d2, weights=np.array([2, 2, 1, 1, 1]))) print("中位数median:", np.median(d2)) # 中位数,如未偶数,则取中间2个值进行除以2 print("中位数median,偶数:", np.median([1, 2, 3, 4, 5, 6])) #方差 求每个数的离散值 print("方差,,var:", np.var(d2)) print("标准差,std:", np.std(d2))平均值mean: 3.0
平均值average: 3.0
平均值,加权: 2.5714285714285716
中位数median: 3.0
中位数median,偶数: 3.5
方差,求每个数的离散值,var: 2.0
标准差,std: 1.4142135623730951
4.聚合运算
sum与np.sum性能对比,np.sum函数比内置统计函数快了10倍
#聚合运算 a = np.array([1, 2, 3, 4, 5]) print("内置统计函数sum:",sum(a)) print("numpay统计函数:sum:",np.sum(a)) print("累计乘prod:",np.prod(a)) print("最大值max:",np.max(a)) print("最小值min:",np.min(a))内置统计函数sum: 15
numpay统计函数:sum: 15
累计乘prod: 120
最大值max: 5
最小值min: 1
5.筛选排序:
# 筛选、排序 a = np.array([1, 2, 3, 4, 5, 6]) # 筛选函数,注意返回的是下标 print("筛选:", np.where(a > 3)) print("排序,升序:", np.sort(a))筛选: (array([3, 4, 5], dtype=int64),)
排序: [1 2 3 4 5 6]
5.矩阵运算
1.什么是矩阵,
- 按照长方阵列(m行*n列)排列的数值集合
- dot使用
a = np.arange(15).reshape(3, 5) b = np.arange(15, 30).reshape(3, 5) print("a:",a) print("b:",b) # 转置 a = a.T print("a转置后",a) print(np.dot(a, b))a: [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
b: [[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]]
a转置后 [[ 0 5 10]
[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]]
[[350 365 380 395 410]
[410 428 446 464 482]
[470 491 512 533 554]
[530 554 578 602 626]
[590 617 644 671 698]]