数组的读 / 写
NumPy提供了多种文件操作函数存取数组内容。文件存取的格式分为两类;二造制和文本。
1. 读/写二进制文件
二进制格式的文件又分为NumPy专用的格式化一进制类刑和无格式类型,NumPy中读/写二进制文件的方法有以下两种。
执行代码 | 说明 |
NumPy. load(”文件名,npy”) | 从二进制的文件中读取数据 |
NumPy. save(”文件名[.npy]”,arr) | 以二进制的格式保存数据 |
它们会自动处理元素类型和shape等信息,使用它们读/写数组就非堂方便,但是np.save输出的文件很难用其他语言编写的程序读入。
例题1:(数组的读/写)
a = np.arange(1, 13).reshape(3,4)
print(a)
np. save('arr. npy', a)
c = np. load( 'arr.npy')
print(c)
例题2:(多个数组保存)
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.arange(0, 1.0, 0.1)
C = np.sin(b) #长度为10
print(C)
np.savez('result.npz', a, b, sin_array =C)
r = np.load('result.npz')
print(r['arr_0']) #数组a
2.读/写文本文件
NumPy中读/写文本文件的主要方法有以下几种。
执行代码 | 说明 |
NumPy, loadtxt("../tmp/arr.txt",delimiter=", ") | 把文件加载到一个二维数组中 |
NumPy. savetxt("../tmp/arr.txt", arr, fmt="%d", delimiter=", ") | 将数组写到某种分隔符隔开的文本文件中 |
NumPy. genfromtxt("../tmp/arr.txt",delimiter=",”) | 结构化数组和缺失数据 |
例题3:(读/写文本文件)
a = np.arange(0, 12, 0.5).reshape(4, -1)
np.savetxt("D:/VC/CSDN/al-out.txt", a)
#默认按照’.18e'格式保存数值
np.savetxt("D:/VC/CSDN/a2-out.txt", a, fmt="%d", delimiter=",")
#改为保存为整数,以逗号分隔
array = np.loadtxt("D:/VC/CSDN/a2-out.txt", delimiter=",")
#读入的时候也需要指定逗号分隔
print('array:', array)
3.读取CSV文件
读取CSV文件格式:
comments ='#',delimiter =None,converters -None, skiprows=0, loadtxt(fname, dtype=,
usecols = None, unpack = False, ndmin = 0, encoding = 'bytes')
参数 | 说明 |
fname | str,读取的CSV文件名 |
delimiter | str,数据的分隔符 |
usecols | tuple(元组),执行加载数据文件中的哪些列 |
unpack | bool,是否将加载的数据拆分为多个组,True表示拆,False表示不拆 |
skiprows | int,跳过多少行,一般用于跳过前几行的描述性文字 |
encoding | bytes,编码格式 |
Numpy中的数据统计与分析
1.排序
直接排序: | sort函数 |
间接排序: | argsort函数 |
lexsort函数 |
(1)sort函数是最常用的排序方法,函数调用改变原始数组,无返回值。
格式:numpy. sort(a, axis, kind, order)
参数 | 说明 |
a | 要排序的数组 |
axis | 使得sort函数可以沿着指定轴对数据集进行排序 axis=1为沿横轴排序; axis=None, 将数组平坦化之后进行排序。 |
kind | 排序算法,默认为 quicksort |
order | 如果数组包含字段,则是要排序的字段 |
例题4:(使用sort函数进行排序)
arr = np.array([7, 9, 5,2, 9,4, 3, 1,4,3])
print('原数组:', arr)
arr.sort()
print('排序后:',arr)
例题5:(带轴向参数的sort排序)
arr = np.array([[4, 2, 9,5],[6,4,8,3],[1,6,2,4]])
print('原数组:\n', arr)
arr.sort(axis =1) #沿横向排序
print('排序后:',arr)
(2)使用argsort和lexsort函数,可以在给定一个或多个键时,得到一个由整数构成的
索引数组,索引值表示数据在新的序列中的位置。
例题6:(argsort函数)
arr = np.array([7, 9, 5, 2, 9, 4, 3, 1, 4, 3])
print('原数组:', arr)
print('排序后:',arr.argsort())
#返回值为数组排序后的下标排列
print('显示较大的5个数:',arr[arr.argsort()][-5:])
例题7:(lexsort函数)
a= [1,5, 7,2,3,-2,4]
b=[9,5,2,0,6,8,7]
ind = np.lexsort((b,a))
print('ind:',ind)
tmp = [(a[i],b[i])for i in ind]
print('tmp:',tmp)
2.重复数据与去重
(1)在数据统计分析中,需要提前将重复数据剔除。在NumPy中,可以通过unique数找到数组中的唯一值并返回已排序的结果,其中的参数return_counts设置为True时可以返回每个取值出现的次数。
例题8:(数组内数据去重)
names = np.array(['红色','蓝色','蓝色','白色','红色','红色'])
print('原数组:',names)
print('去重后的数组:',np.unique(names))
(2)统计分析中有时需要把一个数据重复若干次,在NumPy中主要使用 tile和repeat函数实现数据重复。
函数 | 格式 | 说明 |
tile | numpy. tile(A, reps) | A表示要重复的数组; reps表示重复次数。 |
repeat | numpy. repeat(a, reps, axis = None) | a是需要重复的数组元素; reps是重复次数; axis指定沿着哪个轴进行重复:axis=0表示按行进行元素重复,axis=1表示按列进行元素重复。 |
例题9:(使用title函数实现数据重复)
arr=np.arange(5)
print('原数组:',arr)
wy=np.tile(arr,3)
print('重复数据处理:\n',wy)
例题10:(使用repeat函数实现数据重复)
arr = np.arange(5)
print('原数组:',arr)
wy = np.tile(arr, 3)
print('重复数据处理:\n',wy)
arr2 = np.array([[1, 2,3],[4, 5,6]])
print('重复数据处理:\n',arr2.repeat(2,axis=0))
常用统计函数
NumPy中提供了很多用于统计分析的函数,常见的有sum、mean、std、var、min和max等。几乎所有的统计函数在针对二维数组时都需要注意轴的概念。当axis参数为0时,表示沿着纵轴进行计算;当axis=1时表示沿横轴进行计算。
例题11:(常用统计函数示例)
arr = np.arange(20).reshape(4,5)
print('创建的数组:\n',arr)
print('数组的和:',np.sum(arr))
print('数组纵轴的和:',np.sum(arr, axis=0))
print('数组横轴的和:',np.sum(arr,axis=1))
print('数组的均值:',np.mean(arr))
print('数组横轴的均值:',np.mean(arr, axis=1))
print('数组的标准差:',np.std(arr))
print('数组横轴的标准差:',np.std(arr, axis=1))