0x24 numpy基础,线性代数
Posted liu247
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0x24 numpy基础,线性代数相关的知识,希望对你有一定的参考价值。
01numpy的使用
1.numpy的两个基本元素 n维数组和矩阵
lst = [[1,3,8],[2,4,7]] arr = np.array(lst,dtype=float) mat = np.mat(lst,dtype=float) print(‘arr type:, \nmat type:‘.format(type(arr),type(mat))) arr_add = arr + mat # narray 加矩阵 还是的等于矩阵 print(‘\nType:\nValue:\n‘.format(type(arr_add),arr_add))
# arr type:<class ‘numpy.ndarray‘>,
# mat type:<class ‘numpy.matrix‘>
# Type:<class ‘numpy.matrix‘>
# Value:
# [[ 2. 6. 16.]
# [ 4. 8. 14.]]
2.元素的基本属性
print(‘维度数:‘,arr.ndim) print(‘每维的形状:‘,arr.shape) print(‘元素个数:‘,arr.size) print(‘数据类型:‘,arr.dtype) print(‘每个字符元素占的字节:‘,arr.itemsize)
# 维度数: 2
# 每维的形状: (2, 3)
# 元素个数: 6
# 数据类型: float64
# 每个字符元素占的字节: 8
02切片和索引
ten = np.arange(10) print(ten) # 太基础了就不写了 ten.shape = (2,5) #转化为二维数组 print(‘1:\n‘,ten[1,1]) #二维数组的索引 第一数是行,第二个数是列 print(‘2:\n‘,ten[0]) #第一行的所有元素 print(‘3:\n‘,ten[1,:]) #第一行的所以元素 print(‘4:\n‘,ten[1:,:]) #出第一行外,所有剩下的元素 print(‘5:\n‘,ten[:,::2]) #所有的行,隔一列取一个数字 print(‘6:\n‘,ten[:,[0,3,1]]) # 所有行,用数组选定制定列
03变形与切片
1.变形
lst = [[1,3,8],[2,4,7]] arr = np.array(lst,dtype=float) a1 = arr.reshape([1,6]) # 变形 a2 = arr.reshape([3,2]) # 变形2 a3 = arr.reshape([2,-1]) # -1的意思就是让他自己去做 print(‘a1:\n‘,a1) print(‘a2:\n‘,a2) print(‘a3:\n‘,a3) print(‘ndim: shape:‘.format(a1.ndim,a1.shape)) print(‘ndim: shape:‘.format(a2.ndim,a2.shape))
a1: [[1. 3. 8. 2. 4. 7.]] a2: [[1. 3.] [8. 2.] [4. 7.]] a3: [[1. 3. 8.] [2. 4. 7.]] ndim:2 shape:(1, 6) ndim:2 shape:(3, 2)
2.统计--聚类函数
print(arr) print(‘column min‘,arr.min(axis=0)) print(‘column max‘,arr.max(axis=0)) print(‘row mean‘,arr.mean(axis=1)) print(‘row sum‘,arr.sum(axis=1)) print(‘row product‘,arr.prod(axis=1)) #这个轴上的乘积 print(‘column cumsum:\n‘,arr.cumsum(axis=1)) # 不断叠加的数 相当与累加
# 结果
[[1. 3. 8.] [2. 4. 7.]] column min [1. 3. 7.] column max [2. 4. 8.] row mean [4. 4.33333333] row sum [12. 13.] row product [24. 56.] column cumsum: [[ 1. 4. 12.] [ 2. 6. 13.]]
04矩阵运算
1.加减除 都是对应位置进行运算(注意两个矩阵的shape要一样)
2.乘法 分为点乘和数乘
并且在narrayn类型和matrix类型的操作是不一样的
1 arr = np.array([[1,3,8],[2,4,7]]) 2 arr2 = arr * 2 3 print(type(arr),type(arr2)) 4 print(‘array multiply:\n‘,np.multiply(arr,arr2)) 5 print(‘array multiply:\n‘,arr * arr2) # 默认为普通的乘法 6 print(‘array dot:\n‘,arr.dot(arr2.T)) #矩阵的乘法 7 # <class ‘numpy.ndarray‘> <class ‘numpy.ndarray‘> 8 # array multiply: 9 # [[ 2 18 128] 10 # [ 8 32 98]] 11 # array multiply: 12 # [[ 2 18 128] 13 # [ 8 32 98]] 14 # array dot: 15 # [[148 140] 16 # [140 138]]
1 # matrix 2 mat2 = mat*2 3 print(type(mat),‘\n‘,type(mat2)) 4 print(‘matrix multipy:\n‘,np.multiply(mat,mat2)) 5 print(‘matrix multipy:\n‘,mat * mat.T) 6 print(‘matrix dot:\n‘,mat.dot(mat2.T)) 7 # <class ‘numpy.matrix‘> 8 # <class ‘numpy.matrix‘> 9 # matrix multipy: 10 # [[ 2. 18. 128.] 11 # [ 8. 32. 98.]] 12 # matrix multipy: 13 # [[74. 70.] 14 # [70. 69.]] 15 # matrix dot: 16 # [[148. 140.] 17 # [140. 138.]]
3.特殊的矩阵
注意点-->zeros和ones的u参数都是一个元组
eye只带一个参数就是单位矩阵 和identity是一样的
但是eye也可以带两个参数-->可以看成标准型矩阵
1 print(‘1:\n‘,np.zeros((2,3))) # 零矩阵 2 print(‘2:\n‘,np.ones((3,2))) # 一矩阵 3 print(‘3:\n‘,np.eye(3)) # 单位矩阵 4 print(‘4:\n‘,np.eye(3,2)) # 变形的单位矩阵 5 print(‘5:\n‘,np.identity(3)) 6 # 1: 7 # [[0. 0. 0.] 8 # [0. 0. 0.]] 9 # 2: 10 # [[1. 1.] 11 # [1. 1.] 12 # [1. 1.]] 13 # 3: 14 # [[1. 0. 0.] 15 # [0. 1. 0.] 16 # [0. 0. 1.]] 17 # 4: 18 # [[1. 0.] 19 # [0. 1.] 20 # [0. 0.]] 21 # 5: 22 # [[1. 0. 0.] 23 # [0. 1. 0.] 24 # [0. 0. 1.]]
05实用方法
# 点的均分 np.linspace(1,9,100) # 1 到 9 之间生成100个点 # 对数据进行按区间统计 data = np.random.randn(5) print(data) hist,bin_edges = np.histogram(data,[-5,0,5.0]) print(hist,bin_edges) # [-0.42084482 0.63806664 0.36249437 0.87166671 -0.16333273] # [2 3] [-5. 0. 5.]
# 使用searchsorted方法查找要插入的位置 import random data = sorted(random.sample(range(100),6)) print(data) np.searchsorted(data,8) # [2, 5, 62, 73, 80, 98] # 2
# 随机产生具有正太分布的数组 print(np.random.randn(2,3)) # 合并数据 a = np.ones((2,2)) b = np.eye(2) print(np.vstack((a,b))) # 纵向合并 print(np.hstack((a,b))) # 横向合并 # [[-1.01588455 1.29143552 -0.96335368] # [-0.22734122 -1.99529277 -0.83173721]] # [[1. 1.] # [1. 1.] # [1. 0.] # [0. 1.]] # [[1. 1. 1. 0.] # [1. 1. 0. 1.]]
06 结语
numpy对自己实现数据挖掘算法或者是阅读成熟的源码都很重要,numpy里还有一个十分强大的线性代数的库linalg.好好学习吧!
以上是关于0x24 numpy基础,线性代数的主要内容,如果未能解决你的问题,请参考以下文章