1、numpy和pandas的作用
主要应用于数据分析的数据包,比python内置的数据类型,运算速度更快,数据包是基于C语言完成。numpy和pandas矩阵运算比单独元素计算要快。
2、安装
具体可以参考以下连接
Anaconda 使用指南
初学者如何自学Anaconda
3、numpy属性
array = np.array(
[[1,2,3],
[2,3,4]]
)
print(array)
# 矩阵的维数,行列式变换之后,非零的行数
print('number of dim:',array.ndim)
# 矩阵的行列数
print('shape:',array.shape)
# 矩阵中元素个数
print('size:',array.size)
输出:
[[1 2 3]
[2 3 4]]
number of dim: 2
shape: (2, 3)
size: 6
4、创建array
a=np.array(
[2,23,4]
)
# 输出列表的时候没有逗号
print(a)
#默认的int是64位的,可以指定int32、int16
a=np.array([2,23,4],dtype=np.int)
print(a.dtype)
#小数,默认也是64位
a=np.array([2,23,4],dtype=np.float)
print(a.dtype)
a=np.zeros((3,4))
print(a)
a=np.ones((3,4),dtype = np.int16)
print(a)
#无限接近零的矩阵
a=np.empty((3,4))
print(a)
#类似python的range(),第三个参数是步长,不包括第二个元素
a=np.arange(10,20,2)
print(a)
a=np.arange(12).reshape((3,4))
print(a)
#1-10之间分20段
a=np.linspace(1,10,6)
print(a)
输出:
[ 2 23 4]
int32
float64
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[10 12 14 16 18]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[ 1. 2.8 4.6 6.4 8.2 10. ]
5、numpy的基础运算
a=np.array([10,20,30,40])
b=np.arange(4)
#对应元素逐个相减
c=a-b
print(c)
d=b**2
print(d)
#对a的每个元素求sin()
e=10*np.sin(a)
print(e)
e=10*np.tan(a)
#判断不等于,每个元素如果小于3就是true,否则是false
print(b<3)
print(b==3)
#矩阵运算
a=np.array([[1,1],
[0,1]])
b=np.arange(4).reshape((2,2))
print(a)
print(b)
# 逐个相乘
c=a*b
c_dot = np.dot(a,b)
print(c)
print(c_dot)
#另一种
d_dot = a.dot(b)
print(d_dot)
#随机数,1以内
a=np.random.random((2,4))
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))
#asix=0是在列中,1是在行中
print(np.sum(a,axis=1))
print(np.max(a,axis=1))
print(np.min(a,axis=0))
输出:
[ 1. 2.8 4.6 6.4 8.2 10. ]
[10 19 28 37]
[0 1 4 9]
[-5.44021111 9.12945251 -9.88031624 7.4511316 ]
[ True True True False]
[False False False True]
[[1 1]
[0 1]]
[[0 1]
[2 3]]
[[0 1]
[0 3]]
[[2 4]
[2 3]]
[[2 4]
[2 3]]
[[0.11190992 0.5160577 0.13761991 0.61471612]
[0.8412749 0.39958057 0.69939541 0.06168831]]
3.3822428408476086
0.061688313221138213
0.8412749031281933
[1.38030365 2.00193919]
[0.61471612 0.8412749 ]
[0.11190992 0.39958057 0.13761991 0.06168831]
6、基础运算2
A=np.arange(2,14).reshape((3,4))
print(A)
#最小值索引
print(np.argmin(A))
#最大值索引
print(np.argmax(A))
#整个矩阵的平均值
print(np.mean(A))
print(A.mean())
print(np.average(A))
#0对于列进行计算平均数
print(np.mean(A,axis=0))
#中位数,中位数和平均值一样
print(np.median(A))
#当前元素与之前所有元素累加
print(np.cumsum(A))
#当前元素与前一个元素的累差
print(np.diff(A))
#输出非零行的位置
print(np.nonzero(A))
#排序,逐行排序,只排序各行
print(np.sort(A))
#矩阵的转置,但不能转置列表(一维矩阵)
print(np.transpose(A))
print(A.T)
print(A.T.dot(A))
#矩阵A中所有小于5的数都等于5,所有大于9的数都等于9
print(np.clip(A,5,9))
输出:
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
0
11
7.5
7.5
7.5
[6. 7. 8. 9.]
7.5
[ 2 5 9 14 20 27 35 44 54 65 77 90]
[[1 1 1]
[1 1 1]
[1 1 1]]
(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))
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
[[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]]
[[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]]
[[140 158 176 194]
[158 179 200 221]
[176 200 224 248]
[194 221 248 275]]
[[5 5 5 5]
[6 7 8 9]
[9 9 9 9]]
7、numpy的索引
A = np.arange(3,15)
print(A)
print(A[3])
A = np.arange(3,15).reshape((3,4))
print(A)
#A矩阵的第三行
print(A[2])
#第一行第一列
print(A[1][1])
print(A[1,1])
#第二行所有数
print(A[1,:])
#第二列所有数
print(A[:,1])
#第二行,2-4的数
print(A[1,1:3])
#默认迭代矩阵A的行
for row in A:
print(row)
#迭代矩阵A的列
for column in A.T:
print(column)
print(A.flatten())
#迭代各项
for item in A.flat:
print(item)
[ 3 4 5 6 7 8 9 10 11 12 13 14]
6
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
8
8
[ 7 8 9 10]
[ 4 8 12]
[8 9]
[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]
3
4
5
6
7
8
9
10
11
12
13
14
8、array的合并
A = np.array([1,1,1])
B = np.array([2,2,2])
#上下合并, vertical stack
C = np.vstack((A,B))
print(A.shape,C.shape)
#左右合并,horizontal stack
D = np.hstack((A,B))
print(D)
print(D.shape)
#在横向加一个维度,因为原本A是一维的(3),所以在那边加都会变成二维
print(A.shape)
print(A[np.newaxis,:],A[np.newaxis,:].shape)
#纵向加一个维度
print(A[:,np.newaxis],A[:,np.newaxis].shape)
#多矩阵合并
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
print(np.hstack((A,B,B)))
#0表示上下维度,1表示横向
C = np.concatenate((A,B,B,A),axis=1)
print(C)
输出:
(3,) (2, 3)
[1 1 1 2 2 2]
(6,)
(3,)
[[1 1 1]] (1, 3)
[[1]
[1]
[1]] (3, 1)
[[1 2 2]
[1 2 2]
[1 2 2]]
[[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]
9、array分割
A = np.arange(12).reshape((3,4))
print(A)
#纵向分割,这里的axis的理解正好跟上面的相反 1表示纵向了
print(np.split(A,2,axis=1))
#横向分割另一种方法
print(np.hsplit(A,2))
#横向分割
print(np.split(A,3,axis=0))
print(np.vsplit(A,3))
#做不均匀分割,以上分割方法无法均匀分割
print(np.array_split(A,3,axis=1))
输出:
[[ 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],
[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]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
10、赋值
a=np.arange(4)
b=a
c=a
d=b
#这个a默认是int,因此这么复制,第一个元素是0
a[0]=0.3
print(a,b,c,d)
a[0]=11
print(a,b,c,d)
#所有的起始都是a
#深度赋值
b=a.copy()
a[3]=44
print(a,b)
输出:
[0 1 2 3] [0 1 2 3] [0 1 2 3] [0 1 2 3]
[11 1 2 3] [11 1 2 3] [11 1 2 3] [11 1 2 3]
[11 1 2 44] [11 1 2 3]