栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

总结python数据分析 numpy 类库常用方法的学习

Python 更新时间:发布时间: 百科书网 趣学号

一、创建array对象

#一、创建数组对象(通过列表的方式)
data1=[6,7,5.4,8,0,1]
arr1=np.array(data1)#array([6, 7, 5, 8, 0, 1])

data2=[[6,7,8,9],[1,2,3,4],[1,2,3,5]]
arr2=np.array(data2)#array([[6, 7, 8, 9],
#[1, 2, 3, 4]])
arr2.shape#(3, 4),元组的长度length代表数组的维度,元组中每一个元素对应每一个维度中的元素个数
arr2.ndim #维度,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维

#zero和ones生成指定形状的全为0或1的数组,empty可以创建一个没有任何具体值的数组
np.zeros((2,3,2))
np.ones((2,2,3))
np.empty((4,2,3))

np.arange(10)#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

#np.eye(N),np.identity(N),创建一个正方形N*N的矩阵,对角线为1,其他为0
np.eye(3)
np.identity(6)
二、array数据类型

#二、数组的数据类型Python
arr1.dtype#dtype(‘float64’),np.array会为新建的数组推断出一个合适的数据类型,通过arr.dtype查看数据类型,
arr2.dtype#dtype(‘int32’)
arr3=arr1.astype(np.int32)
print(arr3.dtype)#int32 通过arr.astype()改变数组的数据类型,返回一个新数组,原数组并不改变。
三、数组和标量之间的运算

import numpy as np
data=[[1,2,3],[4,5,6]]
arr1 = np.array(data)

#大小相等的数组之间的任何算数运算符都会将运算应用到元素级
#arr1  #array([[1, 2, 3],
      # [4, 5, 6]])
#arr1*arr1  #array([[ 1,  4,  9],
           #    [16, 25, 36]])
#arr1+arr1  array([[ 2,  4,  6],
           #    [ 8, 10, 12]])

#数组与标量的算术运算也会将标量值应用到各个元素
#1/arr1  #array([[ 1.        ,  0.5       ,  0.33333333],
         #       [ 0.25      ,  0.2       ,  0.16666667]])
#arr1**2  #array([[ 1,  4,  9],
          #     [16, 25, 36]], dtype=int32)

四、基本索引和切片

简单一维数组

import numpy as np

#切片
arr2 =np.arange(10)  #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr2[2:8]   #array([2, 3, 4, 5, 6, 7])

#赋值
#arr2[2:8]=1
#arr2   #array([0, 1, 1, 1, 1, 1, 1, 1, 8, 9])

#将一个标量赋值给一个切片时,该值会自动传播到整个选区
#和列表的区别是,数组切片时原始数组的视图,数据不会被复制,视图上任何修改都会直接反映到源数组上。
arr3 = arr2[2:8]
arr3[:]=0
#arr2   #array([0, 1, 0, 0, 0, 0, 0, 0, 8, 9])

#如果想要得到的是复制的一份副本,可以用array的copy()方法
arr4=arr2[:].copy()
arr4

索引

import numpy as np
data=[[1,2,3],[4,5,6],[7,8,9]]
arr=np.array(data)  #array([[1, 2, 3],
                    #       [4, 5, 6],
                    #      [7, 8, 9]])

#元素索引
#arr[1][2]和arr[1,2]两种索引方式等效
arr[1][2]  #6
arr[1,2]   #6

#切片索引
arr[:2,:2]   #array([[1, 2],
             #     [4, 5]])
arr[:2,1]    #array([2, 5])

#花式索引
#为了以特定顺序选取行子集,只需传入一个用于指定顺序的列表或array即可。
arr[[1,2,0]]   #array([[4, 5, 6],
               #        [7, 8, 9],
               #        [1, 2, 3]])


arr2=np.arange(20).reshape(5,4)
arr2  #array([[ 0,  1,  2,  3],
      #         [ 4,  5,  6,  7],
      #         [ 8,  9, 10, 11],
      #         [12, 13, 14, 15],
      #         [16, 17, 18, 19]])

arr2[[1,2,3,4]]   #array([[ 4,  5,  6,  7],
                  #         [ 8,  9, 10, 11],
                  #         [12, 13, 14, 15],
                  #         [16, 17, 18, 19]])

arr2[[1,2,3,4],[1,2,1,1]]  #array([ 5,  10, 13, 17]),最终选出的元素是(1,1),(2,2),(3,1),(4,1)

五、数组转置(transpose)

import numpy as np

#二维数组的转置,高维数组不是很明白
arr = np.arange(15).reshape(5,3) #array([[ 0, 1, 2],
# [ 3, 4, 5],
# [ 6, 7, 8],
# [ 9, 10, 11],
# [12, 13, 14]])

arr.T #array([[ 0, 3, 6, 9, 12],
# [ 1, 4, 7, 10, 13],
# [ 2, 5, 8, 11, 14]])
六、通用函数(元素级数组函数)

通用函数是一种对array中的数据执行元素级运算的函数。应用到数组中的每一个函数

一元函数

abs:计算数组中绝对值,np.abs(arr)

sqrt:计算各元素的平方根,np.sqrt(arr)

square:计算个元素的平方

exp:计算个元素的指数eⁿ

等……

二元函数

add:将数组中对应元素相加

subtract:第一个数组中的元素减去第二个数组中的元素

multiply:数组相乘
divide:除法

七、数学和统计方法

import numpy as np
data=[[1,2,3],[4,5,6],[7,8,9]]
arr = np.array(data)   #array([[1, 2, 3],
                       #        [4, 5, 6],
                       #        [7, 8, 9]])

#sum()对数组中全部或某轴向的元素求和
arr.sum(0)  #array([12, 15, 18])
arr.sum(1)  #array([ 6, 15, 24])
arr.sum()   #45

#mean()求数组中全部元素的算数平均数或某个轴向的算数平均数
arr.mean()   #5.0
arr.mean(0)  #array([ 4.,  5.,  6.])
arr.mean(1)  #array([ 2.,  5.,  8.])

#std()为标准差   var()为方差
arr.std()    #2.5819888974716112
arr.var()    #6.666666666666667

#min,max求数组中最小值,最大值。
arr.min() #1
arr.max() #9

#argmin最小元素的索引,argmax最大元素的索引
arr.argmin()  #0
arr.argmax()  #8

#cumsum求所有元素的累计和
arr.cumsum()    #array([ 1,  3,  6, 10, 15, 21, 28, 36, 45], dtype=int32)

#cumprod求所有元素的累计积
arr.cumprod()   #array([     1,      2,      6,     24,    120,    720,   5040,  40320,  362880], dtype=int32)

八、用于布尔型数组的方法

import numpy as np
bools = np.array([False,False,True,False])

#布尔值经常被转换为1(True),0(False)
(bools>0).sum() #1

#any()用于测试数组中是否存在True
bools.any() #True

#all()用于检查数组中是否所有都是True
bools.all() #False
九、集合运算

import numpy as np
arr1= np.array([1,1,1,2,3,4,4,4,5,5,5,0,3])

#unique()计算数组中唯一元素,并返回有序结果
np.unique(arr1) #array([0, 1, 2, 3, 4, 5])

#intersect1d(x,y) 计算数组中公共元素并返回有序结果
arr2 = np.array([1,2,3,4])
arr3 = np.array([4,3,6,7,8])
np.intersect1d(arr2,arr3) #array([3, 4])

#union1d(x,y)计算数组的并集,返回有序结果
np.union1d(arr2,arr3) #array([1, 2, 3, 4, 6, 7, 8])

#in1d(x,y) 得到一个x中的元素是否包含于y的布尔型数组
np.in1d(arr2,arr3)

#setdiff1d(x,y) 集合的差,元素在x中,不在y中
np.setdiff1d(arr2,arr3)

#setxor1d(x,y) 集合的对称差,不同时存在于两个数组中的元素
np.setxor1d(arr2,arr3)
十、数组文件的输入输出

将数组以二进制格式保存

import numpy as np
arr = np.arange(10)

#np.save可以将数组保存为.npy的二进制文件在磁盘上
#np.load可以将磁盘上保存的数组读取出来
np.save(‘arr_save’,arr)
np.load(‘arr_save.npy’) #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

#np.savez可以将多个数组保存在一个压缩文件中(.npz格式),将数组以关键字参数形式传入
#np.load()读取时,会得到一个类似字典的对象
np.savez(‘many_arr’,a=arr,b=arr)
many_arr = np.load(‘many_arr.npz’)
many_arr[‘a’] #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
many_arr[‘b’] #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
存取文本文件

import numpy as np
arr = np.array([[1,2,3,4],[5,6,7,8]])
arr
np.savetxt('arr.txt',arr)

十一、矩阵计算(两个矩阵的相乘)

import numpy as np
arr1 = np.array([[1,2,3],[2,3,4],[3,4,5]])
arr1 #array([[1, 2, 3],
#[2, 3, 4],
#[3, 4, 5]])
arr2 = np.array([[6,6],[8,8],[5,5]])
arr2 #array([[6, 6],
# [8, 8],
# [5, 5]])

arr1.dot(arr2) #array([[37, 37],
# [56, 56],
# [75, 75]])
十二、随机数生成

import numpy as np
#通过normal得到一个标准正态分布的样本数组
np.random.normal(size=(4,4))

#rand()生成[0,1)的随机值
np.random.rand(2,3) #array([[ 0.96515435, 0.97895945, 0.84420243],
# [ 0.80194013, 0.53194176, 0.41690594]])

#randn产生正态分布的样本值(均值0,标准差1)
np.random.randn(3)

#randint(a,b),从给出的上下限范围内随机选取整数
np.random.randint(3,8)

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/280375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号