文章目录
1、读写二进制文件
- NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式
- save函数是以二进制的格式保存数据。 np.save("…/tmp/save_arr",arr)
- load函数是从二进制的文件中读取数据。 np.load("…/tmp/save_arr.npy")
- savez函数可以将多个数组保存到一个文件中。 np.savez(’…/tmp/savez_arr’,arr1,arr2)
- 存储时可以省略扩展名,但读取时不能省略扩展名。
import numpy as np
1.1、创建两个随机数组
a = np.random.random((3,4))
a
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
[0.01605974, 0.52657326, 0.82535021, 0.39551375],
[0.97713031, 0.45004703, 0.61007741, 0.75425759]])
b = np.random.randn(2,5)
b
array([[ 0.15091007, -0.39143206, -1.03333289, -1.16875257, 1.70066908],
[-0.65763125, 0.06532776, 1.15839962, -0.42828668, -1.35983853]])
1.2、使用save保存单个数据
- 以二进制的格式保存数据。
- np.save("…/tmp/save_arr",arr),“路径”+保存的目标
- 文件格式默认为.npy,可以忽略不写
np.save('./a',a)
1.3、使用savez保存多个数据
- 以二进制的格式保存数据。
- np.savez("…/tmp/save_arr",arr),“路径”+保存的目标
- 文件格式默认为.npz,可以忽略不写
np.savez('./ab.npz',a,b)
1.4、使用load读取数据
- 读取格式为.npy和.npz的二进制文件
- 格式名称不能忽略
(1) 读取.npy文件
np.load('./a.npy')
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
[0.01605974, 0.52657326, 0.82535021, 0.39551375],
[0.97713031, 0.45004703, 0.61007741, 0.75425759]])
(2) 读取.npz文件
d = np.load('./ab.npz')
d
<numpy.lib.npyio.NpzFile at 0x17a56f9b0c8>
(3) 查看读取文件内容
d.files
['arr_0', 'arr_1']
- 读取d中的arr_0
d['arr_0']
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
[0.01605974, 0.52657326, 0.82535021, 0.39551375],
[0.97713031, 0.45004703, 0.61007741, 0.75425759]])
- 读取d中的arr_1
d['arr_1']
array([[ 0.15091007, -0.39143206, -1.03333289, -1.16875257, 1.70066908],
[-0.65763125, 0.06532776, 1.15839962, -0.42828668, -1.35983853]])
2、读取文本格式的数据
print (a)
print (b)
[[0.00097881 0.11324792 0.78365009 0.39502093]
[0.01605974 0.52657326 0.82535021 0.39551375]
[0.97713031 0.45004703 0.61007741 0.75425759]]
[[ 0.15091007 -0.39143206 -1.03333289 -1.16875257 1.70066908]
[-0.65763125 0.06532776 1.15839962 -0.42828668 -1.35983853]]
2.1、savetxt函数
- 将数组写到某种分隔符隔开的文本文件中。
- np.savetxt("…/tmp/arr.txt", arr, fmt="%d", delimiter=",")
- fmt表示数据的格式,delimiter表示数据的分隔符号
- 默认fmt=’%.18e’,delimiter=’ ’
np.savetxt('./a.txt',a)
np.savetxt()
2.2、loadtxt函数
- 把文件加载到一个二维数组中
- np.loadtxt("…/tmp/arr.txt",delimiter=",")
np.loadtxt("./a.txt")
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
[0.01605974, 0.52657326, 0.82535021, 0.39551375],
[0.97713031, 0.45004703, 0.61007741, 0.75425759]])
2.3、genfromtxt函数
- 面向的是结构化数组和缺失数据
- np.genfromtxt("…/tmp/arr.txt", delimiter = “,”)
np.genfromtxt('./a.txt')
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
[0.01605974, 0.52657326, 0.82535021, 0.39551375],
[0.97713031, 0.45004703, 0.61007741, 0.75425759]])
3、对数组进行排序
3.1、直接排序
- sort函数是最常用的排序方法。 arr.sort()
- sort函数也可以指定一个axis参数,使得sort函数可以沿着指定轴对数据集进行排序。axis=1为沿横轴排序; axis=0为沿纵轴排序。
a = np.random.randint(1,51,size=(3,5))
a
array([[38, 22, 28, 37, 3],
[15, 42, 10, 27, 43],
[20, 18, 31, 12, 26]])
(1) 沿横轴排序
a.sort(axis=1) #axis默认为1,横向
a
array([[ 3, 22, 28, 37, 38],
[10, 15, 27, 42, 43],
[12, 18, 20, 26, 31]])
(2) 沿纵轴排序
a.sort(axis=0) #axis=0,表示横向
a
array([[ 3, 15, 20, 26, 31],
[10, 18, 27, 37, 38],
[12, 22, 28, 42, 43]])
(3) 对一维数组排序
a = np.array([6,4,5,7,2])
a.sort()
a
array([2, 4, 5, 6, 7])
3.2、间接排序
- argsort函数返回值为重新排序值的下标。 arr.argsort()
- lexsort函数返回值是按照最后一个传入数据排序的。 np.lexsort((a,b,c))
(1) 使用argsort函数排序
a = np.array([12,5,18])
a.argsort()#按照值得大小返回数值
array([1, 0, 2], dtype=int64)
(2) 使用lexsort函数排序
a = np.array([1,5,18])
b = np.array([10,15,13])
c = np.array([12,6,28])
np.lexsort((a,c,b))#c是最后传入的
array([0, 2, 1], dtype=int64)
4、去重与重复数据
- 重复数据
- tile函数主要有两个参数,参数“A”指定重复的数组,参数“reps”指定重复的次数。np.tile(A,reps)
- repeat函数主要有三个参数,参数“a”是需要重复的数组元素,参数“repeats”是重复次数,参数“axis”指定沿着哪个轴进行重复,axis = 0表示按行进行元素重复;axis = 1表示按列进行元素重复。numpy.repeat(a, repeats, axis=None)
- 数据去重
- 通过unique函数可以找出数组中的唯一值并返回已排序的结果。
4.1、重复数据
a = np.array([12,5,18])
(1) np.repeat()重复数据
- 单个重复,数据相邻
np.repeat(a,2)
array([12, 12, 5, 5, 18, 18])
(2) np.tile()重复数据
- 整体重复
np.tile(a,2)
array([12, 5, 18, 12, 5, 18])
4.2、数据去重
a = np.array([12,5,18])
b = np.tile(a,2)
print ("重复的数据:",b)
c = np.unique(b)
print ("去重后的数据:",c)
c
重复的数据: [12 5 18 12 5 18]
去重后的数据: [ 5 12 18]
array([ 5, 12, 18])
5、常用的统计函数
- 当axis=0时,表示沿着纵轴计算。当axis=1时,表示沿着横轴计算。默认时计算一个总值。
5.1、案例实战
- 读取iris数据集中的花萼长度数据(已保存为csv格式),并对其进行排序、去重,并求出和、累积和、均值、标准差、方差、最小值、最大值
5.1.1、数据初始化
(1) 读取数据
data = np.loadtxt('./iris_sepal_length.csv')
data
array([5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8,
4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5. ,
5. , 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5. , 5.5, 4.9, 4.4,
5.1, 5. , 4.5, 4.4, 5. , 5.1, 4.8, 5.1, 4.6, 5.3, 5. , 7. , 6.4,
6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5. , 5.9, 6. , 6.1, 5.6,
6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7,
6. , 5.7, 5.5, 5.5, 5.8, 6. , 5.4, 6. , 6.7, 6.3, 5.6, 5.5, 5.5,
6.1, 5.8, 5. , 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3,
6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5,
7.7, 7.7, 6. , 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,
7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6. , 6.9, 6.7, 6.9, 5.8,
6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9])
(2) 排序
data.sort()
data
array([4.3, 4.4, 4.4, 4.4, 4.5, 4.6, 4.6, 4.6, 4.6, 4.7, 4.7, 4.8, 4.8,
4.8, 4.8, 4.8, 4.9, 4.9, 4.9, 4.9, 4.9, 4.9, 5. , 5. , 5. , 5. ,
5. , 5. , 5. , 5. , 5. , 5. , 5.1, 5.1, 5.1, 5.1, 5.1, 5.1, 5.1,
5.1, 5.1, 5.2, 5.2, 5.2, 5.2, 5.3, 5.4, 5.4, 5.4, 5.4, 5.4, 5.4,
5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.6, 5.6, 5.6, 5.6, 5.6, 5.6,
5.7, 5.7, 5.7, 5.7, 5.7, 5.7, 5.7, 5.7, 5.8, 5.8, 5.8, 5.8, 5.8,
5.8, 5.8, 5.9, 5.9, 5.9, 6. , 6. , 6. , 6. , 6. , 6. , 6.1, 6.1,
6.1, 6.1, 6.1, 6.1, 6.2, 6.2, 6.2, 6.2, 6.3, 6.3, 6.3, 6.3, 6.3,
6.3, 6.3, 6.3, 6.3, 6.4, 6.4, 6.4, 6.4, 6.4, 6.4, 6.4, 6.5, 6.5,
6.5, 6.5, 6.5, 6.6, 6.6, 6.7, 6.7, 6.7, 6.7, 6.7, 6.7, 6.7, 6.7,
6.8, 6.8, 6.8, 6.9, 6.9, 6.9, 6.9, 7. , 7.1, 7.2, 7.2, 7.2, 7.3,
7.4, 7.6, 7.7, 7.7, 7.7, 7.7, 7.9])
(3) 数据去重
data = np.unique(data)
data
array([4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. , 5.1, 5.2, 5.3, 5.4, 5.5,
5.6, 5.7, 5.8, 5.9, 6. , 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8,
6.9, 7. , 7.1, 7.2, 7.3, 7.4, 7.6, 7.7, 7.9])
(4) 查看个数
data.shape
(35,)
5.1.2、统计运算
(1) 求和
np.sum(data)
210.39999999999998
(2) 累计和
np.cumsum(data)
array([ 4.3, 8.7, 13.2, 17.8, 22.5, 27.3, 32.2, 37.2, 42.3,
47.5, 52.8, 58.2, 63.7, 69.3, 75. , 80.8, 86.7, 92.7,
98.8, 105. , 111.3, 117.7, 124.2, 130.8, 137.5, 144.3, 151.2,
158.2, 165.3, 172.5, 179.8, 187.2, 194.8, 202.5, 210.4])
(3) 均值、标准差、方差、最小值、最大值
print ("均值:",np.mean(data))
print ("标准差:",np.std(data))
print ("方差:",np.var(data))
print ("最小值:",np.min(data))
print ("最大值:",np.max(data))
均值: 6.011428571428571
标准差: 1.0289443768310533
方差: 1.0587265306122449
最小值: 4.3
最大值: 7.9