为什么用numpy & pandas?
答: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
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
'''
初识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 23 4]
[ 2 32 4]]
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-307 1.33511562e-306 1.69121775e-306 1.69122046e-306]
[ 1.05700260e-307 1.11259601e-306 2.04721870e-306 2.04721870e-306]
[ 1.06809181e-306 6.23057349e-307 8.90068589e-308 1.44635488e-307]]
e: [10 12 14 16 18]
f: [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
g: [ 1. 1.47368421 1.94736842 2.42105263 2.89473684
3.36842105 3.84210526 4.31578947 4.78947368 5.26315789
5.73684211 6.21052632 6.68421053 7.15789474 7.63157895
8.10526316 8.57894737 9.05263158 9.52631579 10. ]
h: [[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
'''
数列运算
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]
[ 0 20 60 120]
[ 100 400 900 1600]
[-5.44021111 9.12945251 -9.88031624 7.4511316 ]
[ True True True 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.32610243 0.11649399 0.56386401 0.00982775]
[ 0.51406967 0.44514835 0.30127433 0.32724873]]
b: 2.60402925453
c: 0.00982774954999
d: 0.563864011448
e: [ 0.32610243 0.11649399 0.30127433 0.00982775]
f: [ 0.56386401 0.51406967]
'''
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的值会变成9
print('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: [[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
b: 11
c: 0
d: 7.5
e: 7.5
f: 7.5
g: [ 2 5 9 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: [[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
k: [[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 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]]
'''
数组的索引
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: [[ 3 4 5 6]
[ 7 8 9 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: [[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
____________________________________
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
____________________________________
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
____________________________________
3
4
5
6
7
8
9
10
11
12
13
14
'''
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]]
'''
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: [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 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)
____________________________________
'''
直接赋值是浅拷贝,使用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: [11 1 2 3]
____________________________________
b: [11 1 2 3]
True
____________________________________
d: [11 1 2 3]
True
____________________________________
39419056
39418976
False
____________________________________
'''