数据挖掘python|numpy的基本操作

数据的维度:

一维数据:由对等关系的有序或者无序数据构成,采用线性方程组织。

列表和数组:一组数据的有序结构

区别:1.列表:数据类型可以不同 2.数组:数据类型相同

二维数据:由多个一维数据构成,是一维数据的组合形式。 表格是典型的二维数据,其中,表头是二维数据的一部分。

多维数据:由一维或者二维数据在新维度上扩展形成。(比如加上一个时间维度)

高维数据:高维数据仅利用最基本的二元关系展示数据间的复杂结构。

数据表示格式有三种:json、xml、yaml

numpy

numpy是一个开源的python科学计算基础库

  • 一个强大的N维数组对象ndarray

  • 广播功能函数

  • 整合C/C++/Fortran代码的工具

  • 线性代数、傅里叶变换、随机数生成等功能

    numpy是scipy\pandas等数据处理或者科学计算库的基础

N维数组对象:ndarray
  • 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据

  • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度

观察:科学计算中,一个维度所有数据的类型往往相同。

  • 数据对象采用相同的数据类型,有助于节省运算和存储空间

ndarray是一个多维数组对象,有两部分构成:

  • 实际的数据

  • 描述这些数据的元数据(数据维度、数据类型等)

ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始。

 np.array()
 #生成一个ndarray数组 array是在程序中ndarray的别名

1.1 创建数组的方法
 import numpy as np
 a = np.array([1,2,3,4,5])
 b = np.array(range(1,6))
 c = np.arange(1,6)
 print(a)
 print(b)
 print(c)
 print(a.dtype) # int32或int64
 print(type(a)) # <class 'numpy.ndarray'>

以上三种方法结果是一样的,注意一下输入结果是数组

array:将输入数据(可以是列表、元组、数组以及其它序列)转换为ndarray(Numpy数组),如不显示指明数据类型,将自动推断,默认复制所有输入数据。

arange:Python内建函数range的数组版,返回一个数组。

array的属性:

• shape:返回一个元组,表示 array的维度 [形状,几行几列] (2,3)两行三列,(2,2,3)两个两行三列

• ndim:返回一个数字,表示array的维度的数目

• size:返回一个数字,表示array中所有数据元素的数目

• dtype:返回array中元素的数据类型

ndarray为什么要支持这么多种元素类型?

1.1.2.ndarray数组创建函数创建方法
 a = np.linspace(1,10,4)
 # 起始值 最终值  四个元素 生成浮点型  a > array([1.,4.,7.,10.])
 b = np.linspace(1,10,4,endpoint=False)
 # endpoint=False代表10要不要包括   b > array([1.,3.25,5.5,7.])
 c = np.((a,b))
 # 将两个数组合并成一个新数组
 # c > array([1.,4.,7.,10.,1.,3.25,5.5,7.75])
1.1.3 ones_like创建形状相同的数组
 np.ones_like(a,dtype=float,order='C',subok=True)

返回:与a相同形状和数据类型的数组,并且数组中的值都为1

参数:

a:用a的形状和数据类型,来定义返回数组的属性

dtype : 数据类型,可选

order顺序 : {'C','F','A'或'K'},可选,覆盖结果的内存布局。

subok : bool,可选。True:使用a的内部数据类型,False:使用a数组的数据类型,默认为True

案例1:以下数组是x

 array([[0, 1, 2], [3, 4, 5]]) 
 >>> np.ones_like(x) 
 array([[1, 1, 1], 
        [1, 1, 1]])

案例2:以下数组是y

 array([ 0., 1., 2.]) 
 >>> np.ones_like(y) 
 array([ 1., 1., 1.])
2.2.3 ndarray数组的创建和变换
方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一样,但那改变原数组
.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变
ndarray数组类型变换

new_a = a.astype(new_type) astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一

ndarray数组向列表的转换

ls = a.tolist()

2.2.4 ndarray数组的操作

数组的索引和切片

索引:获取数组中特定位置元素的过程

切片:获取数组元素子集的过程

一维数组的索引和切片:与python的列表类似

 a = np.array([9,8,7,6,5])
 ​
 a[2] >> 7
 ​
 a[1:4:2] >> array([8,6])
 # 起始编号:终止编号(不含):步长    

多维数组的索引:

 a = np.arange(24).reshape((2,3,4))

多维数组的切片:

 a [:,:,::2] # 每个维度可以使用步长跳跃切片
2.2.5ndarray数组的运算

数组与标量之间的运算作用于数组的每一个元素

 a = np.arrange(24).reshape((2,3,4))
 a
 a.mean()
 a = a / a.mean()
 a

Numpy一元函数对ndarray中的数据执行元素级运算的函数

原数组不变,生成新的数组

函数说明
np.abs(x) np.fabs(x)计算数组各元素的绝对值
np.sqrt(x)计算数组各元素的平方根(原数组不变,生成新的数组)
np.square(x)计算数组各元素的平方
np.log(x) np.log10(x) np.log2(x)计算数组各元素的自然对数、10底对数和2底对数
np.ceil(x) np.floor(x)计算数组各元素的ceiling值或floor值
np.rint(x)计算数组各元素的四舍五入值
np.modf(x)计算数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x)计算数组各元素的普通型和双曲型三角函数
np.exp(x)计算数组各元素的指数值
np.sign(x)计算数组各元素的符号值,1(+),0,-1(-)
 a = np.arange(24).reshape((2,3,4))
 np.square(a)
 a = np.sqrt(a)
 a
 np.modf(a) 
 # 计算数组各元素的小数和整数部分以两个独立数组形式返回

Numpy二元函数

函数说明
+ - * / **两个数组各元素进行对应运算
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin()元素级的最大值/最小值计算
np.mod(x,y)元素级的模运算
np.copysign(x,y)将数组y中各元素值的符号赋值给数组x对应元素
> < >= <= == !=算术比较,产生布尔型数组
 a = np.arange(24).reshape((2,3,4))
 b = np.sqrt(a)
 a
 b
 np.maximum(a,b)
 a > b

2.3.1数据的CSV文件存取

csv(comma-Separated Value,逗号分隔值)

csv是一种常见的文件格式,用来存储批量数据

csv的局限性:csv只能有效存储一维和二维数组

np.savetxt() np.loadtxt()只能有效存储一维和二维数组

 # 将数据写入csv文件
 np.savetxt(frame,array,fmt='%.18e',delimiter=None)
 '''
 frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
 array:存入文件的数组
 fmt:写入文件的格式,例如:%d整数形式 %.2f浮点数的形式%.18e
 delimiter:分割字符串,默认是空格
 '''
 a = np.arange(100).reshape(5,20)
 np.savetxt('a.csv',a,fmt='%d',delimiter=',')
 # 将csv文件的数据读入array数组类型中
 np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
 '''
 frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
 dtype:数组类型,可选
 delimiter:分割字符串,默认是任何空格
 unpack:如果True,读入属性将分别写入不同变量
 '''
 b = np.loadtxt('a.csv',delimiter=',')
 b
 b = np.loadtxt('a.csv',dtype=np.int,delimiter=',')
 b
2.3.2多维数组的存取

任意维度数据如何存取呢?

对于ndarray数组可以使用数组中的一个方法:

 a.tofile(frame,sep='',format='%s')
 '''
 frame:文件、字符串的名字
 sep:数据分割字符串,如果是空串,写入文件为二进制
 format:写入数据的格式
 不包含任何的维度信息,只是将数组中的文件列出
 '''
 a = np.arange(100).reshape(5,10,2)
 a.tofile("b.dat",sep=',',format='%d')
 # 如果不指定分隔符这个变量
 a = np.arange(100).reshape(5,10,2)
 a.tofile("b.dat",format='%d')

如何从文本文件和二进制文件还原这些数据呢?

 np.fromfile(frame,dtype=float,count=-1,sep='')
 '''
   frame:文件、字符串
   dtype:读取的数据类型
   count:读入元素个数,-1表示读入整个文件
   sep:数据分割字符串,如果是空串,写入文件为二进制
 '''
 a = np.arange(100).reshape(5,10,2)
 a.tofile("b.dat",sep=',',format='%d')
 c = np.fromfile("b.dat",dtype=np.int,sep=",")
 c
 c = np.fromfile("b.dat",dtype=np.int,sep=",").reshape(5,10,2)
 c

使用该方法需要读取时知道存入文件时数组的维度和元素类型(在写一个文件可以通过元数据文件来存储额外信息)

a.tofile()和np.fromfile()需要配合使用 针对大规模数据

Numpy的便捷文件存取(要以numpy格式)

 np.save(fname,array)
 np.savez(fname,array)
 '''
   frame:文件名,以.npy为扩展名,压缩扩展名为.npz
   array:数组变量
 '''
 np.load(fname)
 '''
   frame:文件名,以.npy为扩展名,压缩扩展名为.npz  还原为数组与数组的相关维度
 '''
  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值