Numpy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式。
save函数是以二进制的格式保存数据。np.save("../tmp/save_arr",arr)
load函数是从二进制的文件中读取数据。np.load("../tmp/save_arr.npy")
savez函数可以将多个数组保存到一个文件中。np.savez("../tmp/savez_arr",arr1.arr2)
注意:存储时可以省略扩展名,但读取时不能省略扩展名。
读取文本格式的数据(txt csv格式):
savetxt 函数是将数组写到某种分隔符隔开的文本文件中。
np.savetxt("../tmp/arr.txt",arr,fmt="%d",delimiter=",")
##fmt="%d" 表示保存为整数,delimiter=",",表示用‘,’隔开
loadtxt函数执行的是把文件加载到一个二维数组中。
np.loadtxt("../tmp/arr.txt",delimiter=",")
genfromtxt函数面向的是结构化数组 和缺失数据。
np.genfromtxt("../tmp/arr.txt",delimiter=",")
直接排序:
sort函数是最常用的排序方法。 arr.sort()
sort函数也可以指定一个axis参数,使得sort函数可以沿着指定轴对数据集进行排序。axis=1时,沿横轴,列的方向排序;axis=0时,沿纵轴,行的方向排序。
import numpy as np
arr = np.arange(16,0,-1).reshape(4,4)
print(arr)
###从小到大,默认升序
arr.sort()
arr.sort(axis=1)
arr.sort(axis=0)
print(sort)
输出结果:
[[16 15 14 13]
[12 11 10 9]
[ 8 7 6 5]
[ 4 3 2 1]]
[[13 14 15 16]
[ 9 10 11 12]
[ 5 6 7 8]
[ 1 2 3 4]]
axis=1:
[[13 14 15 16]
[ 9 10 11 12]
[ 5 6 7 8]
[ 1 2 3 4]]
axis=0:
[[ 4 3 2 1]
[ 8 7 6 5]
[12 11 10 9]
[16 15 14 13]]
###################################################
间接排序:
argsort函数返回值为重新排序值得下标。arr.argsort()
import numpy as np
arr = np.arange(4,0,-1)
print(arr)
res = arr.argsort()
print(res)
输出结果:
[4 3 2 1]
[3 2 1 0] ###返回的是下标
lexsort函数返回值是按照最后一个传入数据排序的。np.lexsort((a,b,c)),则按照c的下标排序。
import numpy as np
arr1 = np.array([1,5,2,4])
arr2 = np.array([99,22,44,33])
res = np.lexsort((arr1,arr2)) ###按照arr2的下标排序
print(res)
输出结果:
[1 3 2 0]
去重与重复数据:
通过unique函数可以找出数组中的唯一值并返回已排序的结果。
import numpy as np
arr = np.array([[1,2,2,6,4,4,3,2,7]])
## 去重+排序
arr_new = np.unique(arr)
print(arr_new)
输出结果:
[1 2 3 4 6 7]
tile函数主要 有两个参数,参数A指定重复的数组,参数reps,指定重复的次数。np.tile(A,reps)
arr = np.arange(16).reshape(4,4)
print(arr)
##对整个数组进行重复 2次
arr_new = np.tile(arr,2)
print(arr_new)
输出结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 0 1 2 3 0 1 2 3]
[ 4 5 6 7 4 5 6 7]
[ 8 9 10 11 8 9 10 11]
[12 13 14 15 12 13 14 15]]
repeat函数主要有三个参数,参数a是需要重复的数组元素,参数repeats是重复次数,参数axis指定沿着 哪个轴进行重复,axis=0表示按行,进行元素重复。axis=1表示按列进行元素重复。
numpy.repeat(a,repeat,axis=None)
arr = np.arange(4).reshape(2,2)
print(arr)
####将每个列的元素重读
arr_new = np.repeat(arr,2,axis=1)
print(arr_new)
输出结果:
[[0 1]
[2 3]]
[[0 0 1 1]
[2 2 3 3]]
###############################################
arr = np.arange(4).reshape(2,2)
print(arr)
###将每个行的元素重复
arr_new = np.repeat(arr,2,axis=0)
print(arr_new)
输出结果:
[[0 1]
[2 3]]
[[0 1]
[0 1]
[2 3]
[2 3]]
这两个函数的主要区别在于,tile函数是对数组进行重复操作,repeat函数是对数组中的每个元素进行重复操作。
3.常用的统计函数
当axis=0时,表示沿着纵轴(行)计算。当axis=1时,表示沿着横轴(列)计算。默认时计算一个总值。
函数 | 说明 |
sum | 计算数组的和 |
mean | 计算数组的均值 |
std | 计算数组的标准差 |
var | 计算数组的方差 |
min | 计算数组的最小值 |
max | 计算数组的最大值 |
argmin | 返回数组最小元素的索引 |
argmax | 返回数组最大元素的索引 |
cumsum | 计算所有元素的累计和 |
cumprod | 计算所有元素的累计积 |
import numpy as np
arr = np.arange(9).reshape(3,3)
print(arr)
### sum,mean,std,var,min,max,argmax,argmin,cumsum,cumprod
print("arr的和为:",arr.sum(axis=1)) ##按照列的方向,横着求和
print("arr的和为:",arr.sum(axis=0)) ##按照行的方向,竖着求和
print("arr的平均值为:",np.mean(arr,axis=1))
print("arr的标准差为:",np.std(arr,axis=1))
print("arr的方差为:",np.var(arr,axis=1))
print("arr的最小值为:",np.min(arr,axis=1))
print("arr的最大值为:",np.max(arr,axis=1))
print("arr的最大值下标为:",np.argmax(arr,axis=1))
print("arr的最小值下标为:",np.argmin(arr,axis=1))
print("arr的累计和为:",np.cumsum(arr,axis=1))
print("arr的累计积为:",np.cumprod(arr,axis=1))
输出结果:
[[0 1 2]
[3 4 5]
[6 7 8]]
arr的和为: [ 3 12 21]
arr的和为: [ 9 12 15]
arr的平均值为: [1. 4. 7.]
arr的标准差为: [0.81649658 0.81649658 0.81649658]
arr的方差为: [0.66666667 0.66666667 0.66666667]
arr的最小值为: [0 3 6]
arr的最大值为: [2 5 8]
arr的最大值下标为: [2 2 2]
arr的最小值下标为: [0 0 0]
arr的累计和为: [[ 0 1 3]
[ 3 7 12]
[ 6 13 21]]
arr的累计积为: [[ 0 0 0]
[ 3 12 60]
[ 6 42 336]]