文章目录
一、numpy
1.numpy作用
相比于python中的字典、列表等计算快,并且使用C语言编写的,涉及矩阵的计算
2.numpy$pandas安装
在使用anaconda和pycharm时,将 Anconda 的解释器添加进 Pycharm 中,此时,即可直接导入numpy包、pandas包
3.numpy属性
# 导入模块
import numpy as np
# 把一个列表转换成矩阵(数组),array(数组)
array = np.array([[1,2,3],[2,3,4]])
print(array)
'''[[1 2 3]
[2 3 4]]'''
# 几维
print('number of dim:',array.ndim) # number of dim: 2
# 行数和列数
print('shape:',array.shape) # shape: (2, 3) 2行3列
# 总共有多少元素
print('size:',array.size) # size: 6
4.numpy创建array
import numpy as np
a = np.array([2,23,4])
print(a) #[ 2 23 4]
# 每一个array可以定义type
# 整型
a = np.array([2,23,4],dtype=np.int)
print(a.dtype) # int32
a = np.array([2,23,4],dtype=np.int64)
print(a.dtype) # int64
# 浮点型
a = np.array([2,23,4],dtype = np.float)
print(a.dtype) # float64
a = np.array([2,23,4],dtype = np.float32)
print(a.dtype) # float32
# 生成矩阵
array = np.array([ [1,2,3],
[2,3,4] ])
print(array)
'''[[1 2 3]
[2 3 4]]'''
# 生成全部为0的矩阵 (3,4)代表3行4列
a = np.zeros((3,4))
print(a)
# 生成全部为1的矩阵
a= np.ones((3,4),dtype=np.int32)
print(a)
# 生成全部为0的矩阵
a = np.empty((3,4))
print(a)
# 生成一个有序的数列或矩阵,跟python中的range一样 包头不包尾
a = np.arange(10,20,2)
print(a) # [10 12 14 16 18]
# 重新定义行和列
a = np.arange(12).reshape((3,4))
print(a)
# 生成多少段从什么到什么的数列
a = np.linspace(1,10,5) # 生成5段从1到10的数列
print(a) # [ 1. 3.25 5.5 7.75 10. ]
# linspace 和 reshape综合使用
a= np.linspace(1,10,6).reshape((2,3))
print(a)
5.numpy的基础运算
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b)
# 减法
c = a-b
print(c) # [10 19 28 37]
# 加法
d = a+b
print(d) # [10 21 32 43]
# 平方
e = b**2
print(e) # [0 1 4 9]
# 乘法
f = a*b
print(f) # [ 0 20 60 120]
# 除法
g = b/a
print(g) # [0. 0.05 0.06666667 0.075 ]
# sin
h = 10*np.sin(a)
print(h) # [-5.44021111 9.12945251 -9.88031624 7.4511316 ]
# cos 、tan与sin同理
# 判断 a、b里面的元素大于、小于、等于某些数
print(a > 20) # [False False True True]
print(b < 2) # [ True True False False]
import numpy as np
a = np.array([[1,1],
[0,1]])
b = np.arange(4).reshape((2,2))
print(a)
print(b)
# 逐个相乘
c = a*b
print(c)
# [[0 1]
# [0 3]]
# 矩阵的乘法
c_dot = np.dot(a,b)
# c_dot = a.dot(b)
print(c_dot)
# [[2 4]
# [2 3]]
# 随机产生0-1之间的数字,需要给的参数是矩阵的行与列
d = np.random.random((2,3))
print(d)
# [[0.00438873 0.61744845 0.46120597]
# [0.94061284 0.88433724 0.59690626]]
print(np.sum(d)) # 和3.504899492845882
print(np.max(d)) # 最大值 0.9406128391409265
print(np.min(d)) # 最小值 0.00438872886596442
# 定义在行或列 axis=1行 axis=0列
print(np.sum(d,axis=1)) # [1.08304315 2.42185634]
print(np.max(d,axis=1)) # [0.61744845 0.94061284]
print(np.min(d,axis=1)) # [0.00438873 0.59690626]
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(A)
# [[ 2 3 4 5]
# # [ 6 7 8 9]
# # [10 11 12 13]]
# 最小值的索引
print(np.argmin(A)) # 0
# 最大值的索引
print(np.argmax(A)) # 11
# 平均值
print(np.mean(A)) # 7.5
# print(A.mean())
print(np.average(A)) # 7.5
# 求中位数
print(np.median(A)) # 7.5
# 逐渐累加
print(A)
print(np.cumsum(A))
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# [ 2 5 9 14 20 27 35 44 54 65 77 90]
# 累差
print(A)
print(np.diff(A))
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# [[1 1 1] 第一个1是A中3-2,依此类推
# [1 1 1]
# [1 1 1]]
# 输出非零的数 nonzero
print(A)
print(np.nonzero(A))
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# (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))
# 分别表示第0行第0列是非零的数,依次类推
# 逐行排序
B = np.arange(14,2,-1).reshape((3,4))
print(B)
print(np.sort(B))
# [[14 13 12 11]
# [10 9 8 7]
# [ 6 5 4 3]]
# [[11 12 13 14]
# [ 7 8 9 10]
# [ 3 4 5 6]]
# 矩阵的转置 行变成列 列变成行
print(np.transpose(B))
print(B.T)
# [[14 10 6]
# [13 9 5]
# [12 8 4]
# [11 7 3]]
# 矩阵的乘法(矩阵的转置与矩阵相乘)
print(B.T.dot(B))
# [[332 302 272 242]
# [302 275 248 221]
# [272 248 224 200]
# [242 221 200 179]]
# clip 截取功能 指定新生成的矩阵的最小值和最大值
print(np.clip(B,5,9)) # 将A中小于5的数变成5,大于9的数变成9
# [[9 9 9 9]
# [9 9 8 7]
# [6 5 5 5]]
6.numpy索引
import numpy as np
A = np.arange(3,15).reshape((3,4))
print(A)
# [[ 3 4 5 6]
# [ 7 8 9 10]
# [11 12 13 14]]
# 索引
print(A[1][1]) # 8
print(A[2][1]) # 12
# :代表所有数
print(A[2,:]) # 第二行的所有数[11 12 13 14]
print(A[:,1]) # 第一列的所有数[ 4 8 12]
print(A[1,1:2]) # 第一行第一列到第二列的所有数(包头不包尾)[8]
# 迭代行
for row in A:
print(row)
# [3 4 5 6]
# [ 7 8 9 10]
# [11 12 13 14]
# 利用转置,迭代列
for column in A.T:
print(column)
# [ 3 7 11]
# [ 4 8 12]
# [ 5 9 13]
# [ 6 10 14]
# 迭代项目---将A转变成只有一行的项目 A.flat
print(A.flat) # A.flat返回一个迭代器对象<numpy.flatiter object at 0x00000173B35E6E10>
print(A.flatten()) # A.flatten返回一维数组的函数
for item in A.flat:
print(item)
7.numpy array合并
import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
# 上下合并,参数为tup
C = np.vstack((A,B))
print(C)
# [[1 1 1]
# [2 2 2]]
print(A.shape,C.shape) # (3,) (2, 3)
# 左右合并
D = np.hstack((A,B))
print(D)
# [1 1 1 2 2 2]
print(A.shape,D.shape) # (3,) (6,)
# 功能:np.newaxis是用来给数组a增加维度的
# 格式:a[np.newaxis和:的组合],如a[:,np.newaxis],a[np.newaxis, np.newaxis, :]
# 详解:np.newaxis在[]中第几位,a.shape的第几维就变成1,a的原来的维度依次往后排。
# 把一个横向的数列变成竖向的数列
print(A[:,np.newaxis])
# [[1]
# [1]
# [1]]
print(A[:,np.newaxis].shape) # (3, 1)
print(A[np.newaxis,:]) # [[1 1 1]]
print(A[np.newaxis,:].shape) # (1, 3)
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
D = np.hstack((A,B))
print(D)
#[[1 2]
# [1 2]
# [1 2]]
# 进行多个array的合并,axis参数来定义在哪个维度进行合并,axis=0列(纵向),axis=1行(横向)
C = np.concatenate((A,B,B,A),axis=1)
print(C)
# [[1 2 2 1]
# [1 2 2 1]
# [1 2 2 1]]
8.numpy 的array分割
import numpy as np
A = np.arange(12).reshape([3,4])
print(A)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# 等量分割
# split 参数分别为ary,分割为多少层,哪个维度
print(np.split(A,2,axis=1))
# [array([[0, 1],
# [4, 5],
# [8, 9]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11]])]
print(np.split(A,3,axis=0))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
# 不等量的分割 array_split
print(np.array_split(A,3,axis=1))
# [array([[0, 1],
# [4, 5],
# [8, 9]]), array([[ 2],
# [ 6],
# [10]]), array([[ 3],
# [ 7],
# [11]])]
# 纵向分割
print(np.vsplit(A,3))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
# 横向分割
print(np.hsplit(A,2))
# [array([[0, 1],
# [4, 5],
# [8, 9]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11]])]
9.numpy的copy&decopy
import numpy as np
A = np.array([1,2,3,4])
print(A) # [1 2 3 4]
# 赋值 两者相互关联
B = A
print(B) # [1 2 3 4]
A[0] = 10
print(A) # [10 2 3 4]
print(B) # [10 2 3 4]
# copy&deepcopy 值复制过来,但两者互不关联
C = A.copy()
A[0] = 20
print(A) # [20 2 3 4]
print(C) # [10 2 3 4]