一、生成矩形操作
1)numpy获取的数据是以 “,” 为分割的数据结构,来生成矩阵
注意:skip_header=1 去掉行首,即说明行
1,Cao jin,28,78978978978,python,2015-11-01 2,张二毛,20,12312312312,IT,2013-11-01 3,三,28,78978978978,python,2015-11-01 4,张大三,28,78978978978,python,2015-11-01 5,二毛,20,12312312312,运维,2013-11-01
import numpy a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str) print(type(a)) # 查看类型 print(a) # 查看获取到的文档 print(help(numpy.genfromtxt)) # 查看该函数的帮助
获得的结果
<class 'numpy.ndarray'> [['1' 'Cao jin' '28' '78978978978' 'python' '2015-11-01'] ['2' '张二毛' '20' '12312312312' 'IT' '2013-11-01'] ['3' '三' '28' '78978978978' 'python' '2015-11-01'] ['4' '张大三' '28' '78978978978' 'python' '2015-11-01'] ['5' '二毛' '20' '12312312312' '运维' '2013-11-01']]
2)单独取值的操作
import numpy a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str,skip_header=1) # skip_header=1 去掉说明行 print(a) print(a[1,5]) # 获取到第二行的,第6个值
2)列表生成矩阵
import numpy verctor = numpy.array([5,10,15,20]) # 矩阵操作 print("==>verctor",verctor) matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]]) # 矩阵操作 print("==>matrix",matrix)
==>verctor [ 5 10 15 20] ==>matrix [[ 5 10 15] [20 25 30] [35 40 45]]
3)获取到行列数
import numpy verctor = numpy.array([1,2,3,4]) # 特殊的行 print(verctor.shape) # (4,) matrix = numpy.array([[5,10,15],[20,25,30]]) print(matrix.shape) # (2, 3) 意思是2行,每行3个元素,即2行3列 print(matrix.ndim) # 2行3列,所以2个维度 print(matrix.size) # 6 个元素 print(matrix.dtype.name) # int32 类型
4)对生成的矩阵数必须统一,如果有一个不是相应的类型,都将发生改变
import numpy verctor = numpy.array([1,2,3,4.0]) print(verctor) print(verctor.dtype)
本来大都是int型,只因为传入了一个float行,都变成了float行
[1. 2. 3. 4.] float64
5)矩阵灵活的切片操作
import numpy vector = numpy.array([5,10,15,20]) print(vector[0:2]) # [ 5 10] # 顾头不顾尾 matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]]) print(matrix) print(matrix[:,2]) # [15 30 45] 获取到每行的第3个元素,相当与获取到第三列 print(matrix[1:,2]) #[15 30 45] # 获取到的是这个列表的第1到最后的元素 print(matrix[:2,2]) #[15 30 45] # 获取到的是这个列表的第0到第1个元素 print(matrix[:,0:2]) # 获取到每行的前2列元素
二、矩阵的基本操作
1)判断矩阵里面的每一个值
import numpy vector = numpy.array([5,10,15,20]) print(vector == 10) # 判断里面的每一个值是否等于10 matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]]) a = matrix == 10 # 判断里面的每一个值是否等于10 print(a,type(a))
2)根据判断值,来进行获取值的操作
import numpy vector = numpy.array([5,10,15,20]) equal_to_ten = (vector == 10) print(equal_to_ten) print(vector[equal_to_ten]) # 取出值为10的 matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]]) second_column_25 = (matrix[:,2] == 15) # 先找到有15的那一行 print(second_column_25) print(matrix[second_column_25]) a = matrix[second_column_25] b = (a == 15) # 获取到15的值 print(a[b])
3)&符号和 |
import numpy vector = numpy.array([5,10,15,20]) equal_five_and_ten = (vector == 10) & (vector == 5) # 不可能存在 print(equal_five_and_ten) vector2 = numpy.array([5,10,15,20]) equal_five_or_ten = (vector2 == 10) | (vector2 == 5) print(equal_five_or_ten)
4)更改矩阵的值
import numpy vector = numpy.array([5,10,15,20]) equal_five_or_ten = (vector == 10) | (vector == 5) vector[equal_five_or_ten] = 50 print(vector)
5)类型的转换
import numpy vector = numpy.array(["1","2","3"]) print(vector.dtype) print(vector) vector = vector.astype(float) print(vector.dtype) print(vector) vector = vector.astype(int) print(vector) print(vector.dtype)
6)取最小值,最大值,每行的和,及每列的和
import numpy matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]]) print(matrix) print(matrix.min()) print(matrix.max()) # 按照行操作axis=1 ,按照列操作axis=0 print(matrix.min(axis=1)) # 计算每一行的最小值 print(matrix.sum(axis=1)) # 计算每一行的和 print(matrix.sum(axis=0)) # 计算每一列的和
7)平分数列
import numpy as np print(np.arange(15)) a = np.arange(15).reshape(3,5) # 等分成3行5列 print(a) print(a.shape) print(a.ndim) # 因为是3行5列,所以维度为2。。 print(a.size) # 计算有多少元素 print(a.dtype.name) # int32 类型
8)初始化数据操作
import numpy as np a = np.zeros((3,4)) # 初始化操作,默认元素为0,且为float print(a) b = np.ones((2,3,4),dtype=np.int32) print(b) c = np.arange(10,30,5) print(c) # [10 15 20 25]
9).random随机数
import numpy as np a = np.random.random((2,3)) print(a) # [[0.27278308 0.53345672 0.83729457] # [0.4760841 0.18489101 0.16778119]]
10)在起始值随机取数
import numpy as np from numpy import pi a = np.linspace(0,2*pi,100) # 在起始值之间平均的找到这些数 print(a) b = np.sin(np.linspace(0,10,5)) print(b)
11)矩阵之间的加减乘除
import numpy as np a = np.array([20,30,40,50]) b = np.arange(4) print(a) print(b) c = a - b print(c) print(a*b) c = c - 1 print(c) print(b**2) print(a<35)
12)矩阵的混合运算
import numpy as np A = np.array([[1,1],[0,1]]) B = np.array([[2,0],[3,4]]) print(A) print(B) print("****************") print(A*B) print("dot dot dot dot") print(A.dot(B)) # 或 print(np.dot(A,B)) # 5 ==>1*2+3 4 ==> 1*0+4 3 ===> 0*2+3 4 ===> 1*0+4 # [[5 4] # [3 4]]
三、矩阵的基本函数
1)e次方计算,根号计算
import numpy as np B = np.arange(3) print(B) print(np.exp(B)) # 返回的是e的多少次方,e = 2.71828 print(np.sqrt(B)) # 开根号
2)矩阵的复制操作
使用 “=” 复制,完全一样。id也一样。深复制
import numpy as np a = np.arange(12) b = a # 在矩阵中,b和a 指向同一个内存地址,犹如创建了一个快捷方式 print(b is a) print(b) b.shape = 3,4 print(a.shape) print(id(a)) print(id(b))
使用“a.view()” 复制,浅复制,共用数据。在修改数据的时候,相应的都会发生变化
import numpy as np a = np.arange(12) c = a.view() # 浅复制。公用数据 print(a) print(c) print(c is a) c.shape = 2,6 print(a) print('#######') c[0,4] = 1234 # 对某一个元素的修改,会影响到原来的元素 print(c) print('#######') print(a)
使用“a.copy()” 复制,完全将数据复制了一份。复制的数据和之前的数据已经脱离了关系。推荐使用
import numpy as np a = np.arange(12) d = a.copy() print(d is a) d[4] = 999 print(d) print(a)
3)矩阵的常用方法
import numpy as np b = np.random.random((3,4)) print(b) print('********') a = np.floor(b*10) # floor 向下的取整 print(a) print('-----------') print(a.ravel()) # ravel 把一个矩阵撑长 print('============') a.shape = (6,2) # 变成了6行2列的矩阵 print(a) print('$$$$$$$') print(a.T) # 行列对换,变成了2行6列
矩阵之间的合并操作
import numpy as np a = np.floor(10*np.random.random((2,2))) b = np.floor(10*np.random.random((2,2))) print(a) print('-----------') print(b) print('===========') print(np.vstack((a,b))) # 同样的特征合并操作 print('***********') print(np.hstack((a,b))) # 不同的特殊合并操作
切割矩阵,按行切,按列切
import numpy as np a = np.floor(10*np.random.random((2,12))) print(a) print('-----------') print(np.hsplit(a,3)) # 平均按列切3刀,分成3份array print(np.hsplit(a,(3,4))) # 在3和4 这个位置按列分别切一刀 b = np.floor(10*np.random.random((12,2))) print(b) print(np.vsplit(b,3)) # 平均按行切3刀,分成3份array
寻找最大值
import numpy as np date = np.sin(np.arange(20)).reshape(5,4) print(date) print("==============") ind = date.argmax(axis = 0) # 按列寻找,寻找到最大数的 id 号 print(ind) print("==============") date_max = date[ind,range(date.shape[1])] # 根据列,找到id号对应的最大值 print(date_max)
把一维矩阵复制成多份
import numpy as np a = np.arange(0,40,10) print(a) b = np.tile(a,(2,2)) # 把a 元素复制成2行2列 print(b)
排序,值的大小排序,值的索引值进行排序
import numpy as np a = np.array([[4,3,5],[1,2,1]]) print(a) b = np.sort(a,axis=1) # 排序 print(b) print("=========") a = np.array([4,3,1,2]) j = np.argsort(a) # 根据索引值的大小进行排序 print(j)
四、总结
a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str) # 从文件解析陈矩阵 a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str,skip_header=1) # skip_header=1 去掉第一行,说明行 matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]]) # 列表矩阵操作 matrix.shape # 获取到矩阵的行列数 print(matrix[:,2]) # 切片操作 =============================== vector = numpy.array([5,10,15,20]) equal_to_ten = (vector == 10) print(vector[equal_to_ten]) # 取值操作 vector.min() # 取最小值 vector = numpy.array(["1","2","3"]) vector = vector.astype(float) # 类型转换 np.arange(15).reshape(3,5) # 等分成3行5列 print(a.shape) np.arange(10,30,5) # 初始化数据 floor 向下的取整 ravel 把一个矩阵撑长 a.shape = (6,2) # 变成了6行2列的矩阵 a.T # 行列对换,变成了2行6列 np.vstack((a,b)) # 同样的特征合并操作 np.hstack((a,b)) # 不同的特殊合并操作 np.hsplit(a,3) # 平均按列切3刀,分成3份array np.hsplit(a,(3,4)) # 在3和4 这个位置按列分别切一刀 np.vsplit(b,3)) # 平均按行切3刀,分成3份array b = a # 矩阵中,a 和 b 完全一样,共用内存地址 c = a.view() # 不推荐使用,浅复制。共用数据。只在修改数据的时候发生了变化 d = a.copy() # 推荐使用,复制了,原来的数据和现在的数据已经没有关系了 date.argmax(axis = 0) # 按列寻找,寻找到最大数的 id 号 date[ind,range(date.shape[1])] # 根据列,找到id号对应的最大值 np.tile(a,(2,2)) # 把a 元素复制成2行2列 np.sort(a,axis=1) # 按行排序 np.sort(a,axis=1) # 值的大小排序 np.argsort(a) # 根据索引值的大小进行排序