文章目录
- 1、numpy & pandas 有什么用
- 2、numpy & pandas 安装 (教学教程)
- 3、 numpy 属性 (教学教程)
- 4、numpy 的创建 array
- 5、numpy的基础运算
- 6、numpy的基础运算(二)
- 7、numpy的索引
- 8、numpy的 array 合并
- 9、numpy的 array 分隔
- 10、numpy的 copy & deep copy
1、numpy & pandas 有什么用 为什么用numpy & pandas?
答:numpy & pandas是科学计算包,计算速度会快很多倍
2、numpy & pandas 安装 (教学教程) 安装 Anaconda 以及numpy、 Scikit-learn 等必备库,参考以下链接
https://blog.csdn.net/tz_zs/article/details/73459800?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4
anaconda建造新的环境,参考以下链接
https://blog.csdn.net/x_iesheng/article/details/79725415?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1
3、 numpy 属性 (教学教程)
import numpy as np
array = np.array([[1,2,3],
[2,3,4]])
print(array)
print('number of dim:',array.ndim)#2维
print('shape:',array.shape)#2行3列
print('size:',array.size)#总共6个元素
'''
运行结果
[[1 2 3]
[2 3 4]]
number of dim: 2
shape: (2, 3)
size: 6
'''
4、numpy 的创建 array 初识array arange linspace reshape
import numpy as np
a = np.array([[2,23,4],
[2,32,4]])#定义一个2行3列的矩阵
print('a:',a) #打印结果之间,无逗号分隔
b=np.zeros((3,4))#定义一个3行4列的零矩阵
print('b:',b)
c=np.ones((3,4),dtype=np.int16)#定义一个3行4列的1矩阵
print('c:',c)
d=np.empty((3,4))#定义一个3行4列的无穷小值矩阵
print('d:',d)
e=np.arange(10,20,2)#定义一个初始值为10,终止值为20,步长为2的数列
print('e:',e)
f= np.arange(12).reshape((3,4))#把数列重新定义成一个3行4列的矩阵
print('f:',f)
g= np.linspace(1,10,20)#定义一个初始值为10,终止值为20,20段的线段
print('g:',g)
h= np.linspace(1,10,6).reshape((2,3))#定义一个初始值为10,终止值为20,20段的线段,再重写线段为2行2列的矩阵
print('h:',h)
'''
运行结果
a: [[ 2 234]
[ 2 324]]
b: [[ 0.0.0.0.]
[ 0.0.0.0.]
[ 0.0.0.0.]]
c: [[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
d: [[1.44635488e-3071.33511562e-3061.69121775e-3061.69122046e-306]
[1.05700260e-3071.11259601e-3062.04721870e-3062.04721870e-306]
[1.06809181e-3066.23057349e-3078.90068589e-3081.44635488e-307]]
e: [10 12 14 16 18]
f: [[ 0123]
[ 4567]
[ 89 10 11]]
g: [1.1.473684211.947368422.421052632.89473684
3.368421053.842105264.315789474.789473685.26315789
5.736842116.210526326.684210537.157894747.63157895
8.105263168.578947379.052631589.5263157910.]
h: [[1.2.84.6]
[6.48.210. ]]
'''
5、numpy的基础运算 数列运算
import numpy as np
a = np.array([10,20,30,40])#定义一个1维数列
b=np.arange(4)#定义一个4个元素的1维数列
print(a,b)
c=a-b#数列相减,一一对应
d=a+b#数列相加,一一对应
e=a*b#数列相乘,一一对应
f=a**2#数列平方,一一对应
g=10*np.sin(a)#求sin函数print(c,d,e,f,g,b<3,sep='\n')
'''
运行结果
[10 20 30 40] [0 1 2 3]
[10 19 28 37]
[10 21 32 43]
[02060 120]
[ 100400900 1600]
[-5.440211119.12945251 -9.880316247.4511316 ]
[ TrueTrueTrue False]
'''
矩阵运算
import numpy as np
a = np.array([[1,1],
[0,1]])
b=np.arange(4).reshape((2,2))
c=a*b#数列运算,一一对应
c_dot=np.dot(a,b)#矩阵运算,和线性代数中运算方法一致
c_dot_2=a.dot(b)#矩阵运算第二种写法
print('a:',a)
print('b:',b)
print('c:',c)
print('c_dot:',c_dot)
print('c_dot_2:',c_dot_2)
'''
运行结果
a: [[1 1]
[0 1]]
b: [[0 1]
[2 3]]
c: [[0 1]
[0 3]]
c_dot: [[2 4]
[2 3]]
c_dot_2: [[2 4]
[2 3]]
'''
axis操作
import numpy as np
a = np.random.random((2,4))#定义一个随机的2行4列的数组
b=np.sum(a)#数组所有元素的和
c=np.min(a)#数组所有元素中的最小值
d=np.max(a)#数组所有元素中的最大值
e=np.min(a,axis=0)#数组每列中的最小值
f=np.max(a,axis=1)#数组每行中的最大值
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
print('e:',e)
print('f:',f)
'''
运行结果
a: [[ 0.326102430.116493990.563864010.00982775]
[ 0.514069670.445148350.301274330.32724873]]
b: 2.60402925453
c: 0.00982774954999
d: 0.563864011448
e: [ 0.326102430.116493990.301274330.00982775]
f: [ 0.563864010.51406967]
'''
6、numpy的基础运算(二) argmax、argmin、mean、average、cumsum、diff、nonzero、sort、transpose、clip
import numpy as np
a = np.arange(2,14).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列
b=np.argmax(a)#返回数组中最大值的序号
c=np.argmin(a)#返回数组中最小值的序号
d=np.mean(a)#返回数组中的平均值
e=a.mean()#求平均值的另一种写法
f=np.average(a)#返回数组中的平均值
g=np.cumsum((a))#返回数组元素以斐波那契数列方式的计算值,换回数组个数与之前一样
h=np.diff(a)#返回数组元素的两数之差,返回的数组元素个数为(a的行数-1)*a的列数
i=np.nonzero(a)#返回数组a中非零值的行序和列序
j=np.sort(a)#数组a排序,但维持原有维度不变
k=np.transpose(a)#矩阵转置
o=(a.T).dot(a)#矩阵转置然后和自身做矩阵乘法
p=np.clip(a,5,9)#矩阵中小于5的值会变成5,大于9的值会变成9print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
print('e:',e)
print('f:',f)
print('g:',g)
print('h:',h)
print('i:',i)
print('j:',j)
print('k:',k)
print('o:',o)
print('p:',p)
'''
运行结果
a: [[ 2345]
[ 6789]
[10 11 12 13]]
b: 11
c: 0
d: 7.5
e: 7.5
f: 7.5
g: [ 259 14 20 27 35 44 54 65 77 90]
h: [[1 1 1]
[1 1 1]
[1 1 1]]
i: (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
j: [[ 2345]
[ 6789]
[10 11 12 13]]
k: [[ 26 10]
[ 37 11]
[ 48 12]
[ 59 13]]
o: [[140 158 176 194]
[158 179 200 221]
[176 200 224 248]
[194 221 248 275]]
p: [[5 5 5 5]
[6 7 8 9]
[9 9 9 9]]
'''
7、numpy的索引 数组的索引
import numpy as np
a = np.arange(3,15).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列
b=a[1][2]#返回数组1行2列的值
c=a[1,2]#返回数组1行2列的值,与上面有相同的效果
d=a[1,1:3]#返回数组中第一行,数列中[1:3]的切片值print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)'''
运行结果
a: [[ 3456]
[ 789 10]
[11 12 13 14]]
b: 9
c: 9
d: [8 9]
'''
遍历数组中的每一行
import numpy as np
a = np.arange(3,15).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列
print('a:',a)
print('____________________________________')
for row in a:#遍历数组每一行,并打印
print(row)
print('____________________________________')
for column in a.T:#遍历数组每一列,并打印
print(column)
print('____________________________________')
for item in a.flat:#把a‘拍平’,然后再遍历每一项,然后打印
print(item)
'''
运行结果
a: [[ 3456]
[ 789 10]
[11 12 13 14]]
____________________________________
[3 4 5 6]
[ 789 10]
[11 12 13 14]
____________________________________
[ 37 11]
[ 48 12]
[ 59 13]
[ 6 10 14]
____________________________________
3
4
5
6
7
8
9
10
11
12
13
14
'''
8、numpy的 array 合并
import numpy as np
a=np.array([1,1,1])
b=np.array([2,2,2])
c=np.vstack((a,b))#vertical stack 竖向合并,维度增加
d=np.hstack((a,b))#horizontal stack 横向合并,维度不变
e=a[np.newaxis,:]#在a的行上增加一个维度
f=a[:,np.newaxis]#在a的列上增加一个维度
A=np.array([1,1,1])[:,np.newaxis]
B=np.array([2,2,2])[:,np.newaxis]
g=np.concatenate((A,B,B,A),axis=0)#将(A,B,B,A)按行合并,将(A,B,B,A)中axis=0的值按顺序放在一起
h=np.concatenate((A,B,B,A),axis=1)#将(A,B,B,A)按列合并,将(A,B,B,A)中axis=1的值按顺序放在一起
print('a:',a)
print('a.shape:',a.shape)
print('____________________________________')
print('b:',b)
print('c:',c)
print('d:',d)
print('e:',e)
print('e.shape:',e.shape)
print('____________________________________')
print('f:',f)
print('f.shape:',f.shape)
print('____________________________________')
print('g:',g)
print('____________________________________')
print('h:',h)
'''
运行结果
a: [1 1 1]
a.shape: (3,)
____________________________________
b: [2 2 2]
c: [[1 1 1]
[2 2 2]]
d: [1 1 1 2 2 2]
e: [[1 1 1]]
e.shape: (1, 3)
____________________________________
f: [[1]
[1]
[1]]
f.shape: (3, 1)
____________________________________
g: [[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]
[1]
[1]
[1]]
____________________________________
h: [[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]
'''
9、numpy的 array 分隔
import numpy as np
a=np.arange(12).reshape(3,4)
b=np.split(a,2,axis=1)#将a按列分为2块,返回list对象
c=np.split(a,3,axis=0)#将a按行分为3块,返回list对象
d=np.array_split(a,3,axis=1)#将a按列分为2块,不等分,返回list对象
e=np.array_split(a,2,axis=0)#将a按行分为3块,不等分,返回list对象
f=np.vsplit(a,3)#将a按列等分,返回list对象
g=np.hsplit(a,2)#将a按行等分,返回list对象
print('a:',a)
print('a.shape:',a.shape)
print('____________________________________')
print('b:',b)
print('b是list对象,b[0].shape:',b[0].shape)
print('____________________________________')
print('c:',c)
print('c是list对象,c[0].shape:',c[0].shape)
print('____________________________________')
print('d:',d)
print('d是list对象,d[0].shape:',d[0].shape)
print('____________________________________')
print('e:',e)
print('e是list对象,e[0].shape:',e[0].shape)
print('____________________________________')
print('f:',f)
print('f是list对象,f[0].shape:',f[0].shape)
print('____________________________________')'''
运行结果
a: [[ 0123]
[ 4567]
[ 89 10 11]]
a.shape: (3, 4)
____________________________________
b: [array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2,3],
[ 6,7],
[10, 11]])]
b是list对象,b[0].shape: (3, 2)
____________________________________
c: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,9, 10, 11]])]
c是list对象,c[0].shape: (1, 4)
____________________________________
d: [array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
d是list对象,d[0].shape: (3, 2)
____________________________________
e: [array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8,9, 10, 11]])]
e是list对象,e[0].shape: (2, 4)
____________________________________
f: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,9, 10, 11]])]
f是list对象,f[0].shape: (1, 4)
____________________________________
'''
10、numpy的 copy & deep copy 【Python|Python数据科学包-初识numpy】直接赋值是浅拷贝,使用copy方法是深拷贝
import numpy as np
a=np.arange(4)
print('a:',a)
print('____________________________________')
b=a
c=a
d=b
a[0]=0.9#给a中元素替换成浮点数时,a不变
print('a:',a)
print('____________________________________')
a[0]=11#给a中元素替换成整数时,a的值改变
print('a:',a)
print('____________________________________')
print('b:',b)#b的值随之改变,说明把a赋值给b,a和b指向内存中同一个id
print(a is b)
print('____________________________________')
print('d:',d)#d的值也随之改变,说明经过多次赋值,d和b指向内存中同一个id
print(d is b)
print('____________________________________')
f=a.copy()
print(id(f))
print(id(a))
print(f is b)#说明f是深拷贝,f和a指向内存中的不同id
print('____________________________________')'''
运行结果
a: [0 1 2 3]
____________________________________
a: [0 1 2 3]
____________________________________
a: [11123]
____________________________________
b: [11123]
True
____________________________________
d: [11123]
True
____________________________________
39419056
39418976
False
____________________________________
'''
推荐阅读
- Python自动化办公—DOCX库(一)
- loguru serialize 减少字段
- python|python中的模块和包
- 机器学习|基于流的(Flow-based)生成模型简介
- ★★★Python|PythonNote038---python执行shell命令
- IC读写器|Python Qt UI设计
- python|Python软件设计基础 第十节-Plotly可视化
- python|一文教会你如何用 Python 分割合并大文件
- python|利用deepstream python将analytics产生的统计数据发送到kafka