numpy库的使用(知识整理)

综述

学生党整理一些关于数据分析的知识:主要贴一些numpy库的用法,方便查询,包括txt文件读取(有报错)、矩阵的初始化及输出、矩阵的切割及合成、矩阵的扩张、矩阵的基本计算方式、排序、找极值、类型转换、矩阵复制等一系列矩阵的处理方法。

代码模块

txt文件读取

鉴于该方法可以被pandas库中方法代替,暂时不解决报错问题。

'''
#读取txt中的文件(pandas库中有更常用的导入数据方式)
word_alcohol = numpy.genfromtxt("one.txt",delimiter=",",dtype=str)#间隔符号为, 类型为字符型
print(type(word_alcohol))
print(word_alcohol)
print(help(numpy.genfromtxt))#帮助文件
'''

矩阵生成及格式类型判断

#numpy.array
vector = numpy.array([1,2,3,4]) #行向量
matrix = numpy.array([
    [1,2,3],
    [2,3,4],
    [5,6,7]
])#矩阵

#输出矩阵
print(vector)
print(matrix)
#输出矩阵格式
print(vector.shape)
print(matrix.shape)

#矩阵类型
number1 = numpy.array([1,2,3])
number2 = numpy.array([1,2,3.0])
number3 = numpy.array([1,2,'3'])
print(number1)
print(number1.dtype)
print(number2)
print(number2.dtype)
print(number3)
print(number3.dtype)

矩阵数据读取

#矩阵中数据读取
word_A = numpy.array([
    ['1998','Droke1','GSU1','0.1'],
    ['1999','Droke2','GSU2','0.2'],
    ['2000','Droke3','GSU3','0.3'],
    ['2001','Droke4','GSU4','0.4']
])
data1 = word_A[1,3]
data2 = word_A[2,2]
print(data1)
print(data2)

矩阵切片及布尔型处理

#矩阵切片及初级操作
vector = numpy.array([5,10,15,20])
print(vector[0:3])
matrix = numpy.array([
    [5,10,15],
    [20,25,30],
    [35,40,45]
])
print(matrix[:,1])
print(matrix[:,0:2])

print(vector == 10)#[False  True False False] 对矩阵中所有的元素进行判断,返回类型为bool
print(matrix == 25)

#可以用vector == 10作为索引输出对应true的位置
print(vector[vector == 10])
print(matrix[matrix[:,1] == 25,:]) #输出第二列等于25的行的所有列的数据

#初级判断&和|的判断
equal_ten_and_five = (vector == 10) & ( vector == 5)
print(equal_ten_and_five)

equal_ten_or_five = (vector == 10) | ( vector == 5)
print(equal_ten_or_five)

vector[equal_ten_or_five] = 50 #将10 和5 的位置赋值 50
print(vector)

类型转换

#类型转换
vector = numpy.array(['1','2','3','4'])
print(vector.dtype)
print(vector)
vector = vector.astype(float) #值类型转换
print(vector.dtype)
print(vector)

行列极值、求和及向量矩阵转换

#求极值操作
vector = numpy.array([5,10,15,20])
print(vector.min())
print(vector.max())

#按行或者按列进行求和
matrix = numpy.array([
    [5,10,15],
    [20,25,30],
    [35,40,45]
])
print(matrix.sum(axis=1))#axis = 1按行求和;0按列求和
print(matrix.sum(axis=0))

#生成数列向量或矩阵
print(np.arange(15)) #[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
a = np.arange(15).reshape(3,5)
print(a)
#[[ 0  1  2  3  4]
 #[ 5  6  7  8  9]
 #[10 11 12 13 14]]

矩阵初始化

#矩阵初始化
print(np.zeros((3,4)))#注意多一个括号
print(np.ones((2,3,4),dtype=np.int32)) #三维矩阵 类型为int

#序列
print(np.arange(10,30,5))#10开始每隔5一个数,30取不到

#随机初始化
print(np.random.rand(2,3)) #范围为0-1之间的数字
print(np.random.random((2,3)))#同上

from numpy import pi
print(np.linspace(0,2*pi,100)) #从0开始到2*pi 随机递增取100个数字

矩阵的基础运算及变化方法

#矩阵运算示例
a = np.array([10,20,30,40])
b = np.arange(4)
print(a)
print(b)
print(a-b)
print(a-1)
print(b**2)
print(a<35)

A = np.array([
    [1,1],
    [0,1]
])
B = np.array([
    [2,0],
    [3,4]
])
print(A)
print('-----------')
print(B)
print('-----------')
print(A*B)#矩阵对应位置相乘
print('-----------')
print(A.dot(B))#矩阵A×矩阵B
print('-----------')
print(np.dot(A,B))#矩阵A×矩阵B与上面一个的算法结果相同

print(np.exp(A)) #e次方
print(np.sqrt(A)) #开根号

a = np.floor(10*np.random.random((3,4)))
print(a) #随机生成向下取整的a矩阵
print('-----------')
print(a.ravel()) #矩阵变向量
print('-----------')
a.shape = (6,2) #向量变矩阵 (6,-1) -1可以自动计算对应的数
print(a)
print('-----------')
print(a.T)#转置

#矩阵拼接
A = np.array([
    [1,1],
    [0,1]
])
B = np.array([
    [2,0],
    [3,4]
])
print(np.hstack((A,B)))#横向拼接 增加变量量
print(np.vstack((A,B)))#纵向 增加样本量

a = np.floor(10*np.random.random((4,6)))
print(a)
print('--------')
print(np.hsplit(a,3)) #横切
print('--------')
print(np.vsplit(a,2)) #纵切
print('--------')
print(np.hsplit(a,(1,2,4)))#设置元组确定切割区间

#数据复制只传数据不传地址,通常 b=a 是b指向a的地址,改变b时会对a的值也改变
a = np.arange(12)
b = a #指向数据相同
c = a.view()#指向不同,数据公用
d = a.copy()#数据复制,指向不同,两者无关联了

#索引找最大值
data = np.sin(np.arange(20)).reshape(5,4)
print(data)
ind = data.argmax(axis = 0) #每列最大值的索引
print(ind)
data_max = data[ind, range(data.shape[1])] #最大值输出 1表示行 0表示列
print(data_max)

矩阵的扩张及排序

#向量扩张成矩阵
a = np.arange(0,40,10)
print(a)
b = np.tile(a,(2,2))
print(b)

#排序
a = np.array([[4,3,5],[1,2,1]])
print(a)
print('------')
b = np.sort(a,axis = 1)#直接排序按行排序方法1
print(b)
print("------")
a.sort(axis=1)#直接排序按行排序方法2
print(a)
print('------')
a = np.array([4,3,1,2])#索引排序
j = np.argsort(a)
print(j)
print('------')
print(a[j])

小结

numpy主要用于处理矩阵,重点掌握array、arange、shape等常用的函数。注意numpy.zeros((3,4))中的参数为整数或整数元组。此外还有np.random.random和np.hstack及np.vstack中参数类型需要注意括号。

猜你喜欢

转载自blog.csdn.net/Droke_Zhou/article/details/87204361