NumPy数据处理基础
一、数据结构
NumPy中主要有多维数组和矩阵结构。
1.1、利用array()函数创建数组
numpy.array(object , dtype=None,*,copy=True,order='K',subok=False,ndmin=0,like=None)
----object参数来创建数组类型的对象
----dtype参数表示数组元素的类型
----copy用布尔值表示创建的数组是否复制object对象中的元素
1.2、访问数组对象属性
创建数组后,我们可以通过以下属性访问数组的值。
- ndim:表示数组维度
- shape:表示数组各维度大小的形状元组
- size:表示数组元素的总个数
- dtype表示元素的数据类型
1.3、数组对象的类型
1、创建指定类型的数组对象
前面已经知道了dtype可以指定数据类型的数组对象,但是在Panadas数据中和python中的数据类型并不同。
以下是可以指定的参数:
dict_keys(['?', 0, 'byte', 'b', 1, 'ubyte', 'B', 2, 'short', 'h', 3, 'ushort', 'H', 4, 'i', 5, 'uint', 'I', 6, 'intp', 'p', 9, 'uintp', 'P', 10, 'long', 'l', 7, 'ulong', 'L', 8, 'longlong', 'q', 'ulonglong', 'Q', 'half', 'e', 23, 'f', 11, 'double', 'd', 12, 'longdouble', 'g', 13, 'cfloat', 'F', 14, 'cdouble', 'D', 15, 'clongdouble', 'G', 16, 'O', 17, 'S', 18, 'unicode', 'U', 19, 'void', 'V', 20, 'M', 21, 'm', 22, 'b1', 'bool8', 'i8', 'int64', 'u8', 'uint64', 'f2', 'float16', 'f4', 'float32', 'f8', 'float64', 'c8', 'complex64', 'c16', 'complex128', 'object0', 'bytes0', 'str0', 'void0', 'M8', 'datetime64', 'm8', 'timedelta64', 'int32', 'i4', 'uint32', 'u4', 'int16', 'i2', 'uint16', 'u2', 'int8', 'i1', 'uint8', 'u1', 'complex_', 'single', 'csingle', 'singlecomplex', 'float_', 'intc', 'uintc', 'int_', 'longfloat', 'clongfloat', 'longcomplex', 'bool_', 'bytes_', 'string_', 'str_', 'unicode_', 'object_', 'int', 'float', 'complex', 'bool', 'object', 'str', 'bytes', 'a', 'int0', 'uint0'])
常用的类型有bool、int、float等后面加数字或下划线,其中数据类型后面加数字表示二进制的位数。
2、转换数组的数据类型
通过数组的astype()方法转换数组的数据类型,得到新的数组,原数组保持不变。
1.4、创建常用数组
1、利用zeros和ones创建指定形状的全0或全1数组
2、利用eye或identity创建单位阵
3、创建等差数组
NumPy中的arange()函数用于创建等差数组对象。
4、创建等比数组
NumPy.logspace()函数用于创建等比数组对象。
5、从字符串创建数组
NumPy.fromstring()函数用于创建字符串数组。
6、根据函数创建数组
NumPy.fromfunction()函数创建数组对象。
import numpy as np
#创建二维数组
li = [[1,2,3,4],[5,6,7,8]]
arr = np.array(li)
print(arr)
#获取数组维度
print(arr.ndim)
#获取各维度大小
print(arr.shape)
#获取元素个数
print(arr.size)
#获取元素数据类型
print(arr.dtype)
#转换数据类型
arr = arr.astype(np.float64)
print(arr)
#创建单位阵
print(np.eye(4))
#根据函数创建数组
fun = np.fromfunction(lambda x,y:x*2+y,(3,4))
print(fun)
[[1 2 3 4]
[5 6 7 8]]
2
(2, 4)
8
int32
[[1. 2. 3. 4.]
[5. 6. 7. 8.]]
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
[[0. 1. 2. 3.]
[2. 3. 4. 5.]
[4. 5. 6. 7.]]
二、数据准备
2.1、随机数的生成
1、使用numpy.random.rand()函数生成[0,1)的随机浮点数
2、使用numpy.random.randn()生成一个具有标准正态分布的随机浮点数样本
3、使用numpy.random.randint()函数生成随机整数
4、使用numpy.random.uniform()生成一个均匀分布的随机采样
5、使用numpy.random.choice()从数组中随机抽取元素
以上所产生的随机值,都是由电脑的当前时间作为随机数种子。
可以通过如下三种方式来设置随机数发生器的种子值:
- numpy.random.seed()函数设置种子值。但是如果设置的是一样的,那么每一次获得的值也不会变。
- numpy.random.RandomState类设置种子值。
- numpy.random.default_rng()函数设置种子值。
2.2、NumPy数组在文本文件中存取
1、将数组写入txt文件或csv文件
可以使用numpy.savetxt将数组保存到以txt为扩展名的文本文件中或以csv为扩展名的文本文件中。
numpy.savetxt(fname,X,fmt='% .18e',deliniter='',newline='\n',header='',footer='',comments='#',encoding=None)
fname--保存文件名
X--一维或二维数据
fmt--输出数据的格式字符串或格式字符串序列
delimiter--分隔列数据的字符串
newline--分隔行的字符串
header--将在文件开头写入的字符串
footer--将在文件尾写入的字符串
comments--注释字符串,放在header或footer字符串前面表示注释
2、从文件中读取数据构成数组
可以利用numpy.loadtxt从文件中读取数据,返回数组。
三、常用数组运算与函数
3.1数组的索引
1、一维数组索引操作
通过数组名【索引号】提取元素,还可以直接修改
2、二维数组索引操作
通过数组名【i,j】或数组名【i】【j】的方式获取,同样可以直接修改。
3.2、数组的切片
数组切片是选取原数组指定位置上的元素构成一个数组。数组切片是原始数据的视图,数据并不会被复制,即视图上的任何修改都会直接体现到原数组或基于同一个原数组的切片上。
3.3、改变数组的形状
1、reshape()方法生成指定形状的数组视图,会产生新的数组
2、resize()方法直接修改原数组的形状,直接在原数组上修改
3、通过设置数组的shape属性值直接修改原数组的形状
3.4、数组对角线上替换新元素值
用NumPy中的fill_diagnoal()函数可以替换任意维数的给定数组主对角线上的元素值。
3.5、用numpy.newaxis或None插入一个维度
3.6、数组的基本运算
3.7、数组的排序
3.8、数组的组合
3.9、数组的分割
3.10、随机打乱数组中的元素顺序
3.11、多维数组的展开
3.12、其他常用函数与对象
四、使用NumPy进行简单统计分析
1、数组在无格式二进制文件中存取
使用数组的tofile()方法可以将数组中的数据以二进制的格式写进文件。
2、数组在npy文件中的存取
numpy.save()函数可以保存任意维度的NumPy数组到一个扩展名为npy的二进制文件中。
3、数组在npz文件中存取
numpy.savez()函数可以一次性将多个数组保存在同一个扩展名为npz的二进制文件中。
4、数组在hdf5文件中存取
利用hdf5格式的文件存储数组,也可以同时存储数组的形状和元素类型。