CSV (Comma‐Separated Value, 逗号分隔值),CSV是一种常见的文件格式,用来存储批量数据。
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
参数说明:frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件;array : 存入文件的数组;fmt : 写入文件的格式,例如:%d %.2f %.18e;delimiter : 分割字符串,默认是任何空格。
np.loadtxt(frame, dtype=np.float, delimiter=None,unpack=False)
参数说明:frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件;dtype : 数据类型,可选;delimiter : 分割字符串,默认是任何空格;unpack : 如果True,读入属性将分别写入不同变量。
CSV文件的局限性:CSV只能有效存储一维和二维数组,np.savetxt() np.loadtxt()只能有效存取一维和二维数组。
a.tofile(frame, sep='', format='%s')
参数说明:frame : 文件、字符串;sep : 数据分割字符串,如果是空串,写入文件为二进制;format : 写入数据的格式。
np.fromfile(frame, dtype=float, count=‐1, sep='')
参数说明:frame : 文件、字符串;dtype : 读取的数据类型;count : 读入元素个数,‐1表示读入整个文件;sep : 数据分割字符串,如果是空串,读入的文件为二进制。
需要注意:该方法需要读取时知道存入文件时数组的维度和元素类型,a.tofile()和np.fromfile()需要配合使用,可以通过元数据文件来存储额外信息。
np.save(fname, array) 或np.savez(fname, array)
参数说明:fname: 文件名,以.npy为扩展名,压缩扩展名为.npz;array : 数组变量。
np.load(fname)
参数说明:fname: 文件名,以.npy为扩展名,压缩扩展名为.npz。
程序实例:
# -*- coding: utf-8 -*-
import numpy as np
import os
# 设置路径为当前路径
path = os.path.dirname(__file__);
os.chdir(path);
data = np.arange(100).reshape(10, 10);
# 保存csv文件
np.savetxt('a.csv', data, fmt='%d', delimiter=',');
# 读取csv文件,不指定数据类型(默认为float)
a = np.loadtxt('a.csv', delimiter=',');
# 读取csv文件,指定数据类型
b = np.loadtxt('a.csv', dtype=np.int, delimiter=',');
# csv只能保持二维数组,任意维度数据的存取使用tofile和fromfile
# sep指定分隔符,若不指定,则文件为二进制文件
data1 = np.arange(100).reshape(5, 10, 2);
data1.tofile("b.dat", sep=",", format="%d");
# fromfile方法读取文件,需要读取时知道存入文件时数组的维度和元素类型
# a.tofile()和np.fromfile()需要配合使用可以通过元数据文件来存储额外信息
c = np.fromfile("b.dat", sep=",", dtype=np.int).reshape(5,10,2);
# 以numpy的文件类型来存取数据,文件扩展名为.npy,压缩文件为.npz
np.save("c.npy", data);
d = np.load("c.npy");
numpy库中有一个random子库为数组类型提供随机数
random子库的函数
函数 |
功能 |
rand(d0,d1,..,dn) |
根据d0‐dn创建随机数数组,浮点数,[0,1),均匀分布 |
randn(d0,d1,..,dn) |
根据d0‐dn创建随机数数组,标准正态分布 |
randint(low[,high,shape]) |
根据shape创建随机整数或整数数组,范围是[low, high) |
seed(s) |
随机数种子,s是给定的种子值 |
shuffle(a) |
根据数组a的第1轴进行随排列,改变数组x |
permutation(a) |
根据数组a的第1轴产生一个新的乱序数组,不改变数组x |
choice(a[,size,replace,p]) |
从一维数组a中以概率p抽取元素,形成size形状新数组 replace表示是否可以重用元素,默认为True |
uniform(low,high,size) |
产生具有均匀分布的数组,low起始值,high结束值,size形状 |
normal(loc,scale,size) |
产生具有正态分布的数组,loc均值,scale标准差,size形状 |
poisson(lam,size) |
产生具有泊松分布的数组,lam随机事件发生率,size形状 |
程序实例:
# -*- coding: utf-8 -*-
import numpy as np
# numpy库中有一个random子库为数组类型提供随机数
# rand() 生成给定数组大小的随机数组, 浮点数,[0,1),均匀分布
a = np.random.rand(3, 4, 5);
# randn() 标准正态分布
b = np.random.randn(3, 4, 5);
# randint(low[,high,shape]) 根据shape创建随机整数或整数数组,范围是[low, high)
c = np.random.randint(100, 200, (3, 4));
print(c);
# seed(s) 随机数种子,s是给定的种子值
# 两次设置相同的随机数种子 生成的随机数一样
np.random.seed(10);
test1 = np.random.randint(10, 20, (3,4));
np.random.seed(10);
test2 = np.random.randint(10, 20, (3,4));
# shuffle(a) 根据数组a的第1轴进行随排列,改变数组x
np.random.shuffle(c);
print(c);
# permutation(a) 根据数组a的第1轴产生一个新的乱序数组,不改变数组x
d = np.random.randint(100, 200, (3, 4));
print(d);
np.random.permutation(d);
print(d);
# 从一维数组a中以概率p抽取元素,形成size形状新数组replace表示是否可以重用元素,默认为True
e = np.random.randint(100, 200, (8,));
print(e);
f = np.random.choice(e, (3, 2));
NumPy直接提供的统计类函数
NumPy的统计函数
函数 |
功能 |
sum(a, axis=None) |
根据给定轴axis计算数组a相关元素之和,axis整数或元组 |
mean(a, axis=None) |
根据给定轴axis计算数组a相关元素的期望,axis整数或元组 |
average(a,axis=None,weights=None) |
根据给定轴axis计算数组a相关元素的加权平均值 |
std(a, axis=None) |
根据给定轴axis计算数组a相关元素的标准差 |
var(a, axis=None) |
根据给定轴axis计算数组a相关元素的方差 |
min(a) max(a) |
计算数组a中元素的最小值、最大值 |
argmin(a) argmax(a) |
计算数组a中元素最小值、最大值的降一维后下标 |
unravel_index(index, shape) |
根据shape将一维下标index转换成多维下标 |
ptp(a) |
计算数组a中元素最大值与最小值的差 |
median(a) |
计算数组a中元素的中位数(中值) |
axis = None 是统计函数的标配参数
程序实例:
# -*- coding: utf-8 -*-
import numpy as np
a = np.arange(15).reshape(3, 5);
# 默认情况下axis = none,求的是所有值的总和
total = np.sum(a);
# axis = 0 每列求总和
total1 = np.sum(a, axis = 0);
# axis = 1 每行求总和
total2 = np.sum(a, axis = 1);
# 其他有axis选项的函数类似
mean = np.mean(a);
mean1 = np.mean(a, axis = 0);
# 根据给定轴axis计算数组a相关元素的加权平均值
# 求每列的加权平均,例如第三列:2*10+7*5+1*12/(10+5+1)=4.1875
avg = np.average(a, axis = 0, weights=[10, 5, 1]);
# 标准差 std
std = np.std(a);
# 方差 yar
var = np.var(a);
b = np.arange(15, 0, -1).reshape(3, 5);
maxb = np.max(b);
# 扁平化后的下标
min_index = np.argmin(b);
# 重塑成多维下标
remin_index = np.unravel_index(np.argmin(b), b.shape);
# 最大值与最小值差
cha = np.ptp(b);
# 中值
media = np.median(b);
函数 |
功能 |
np.gradient(f) |
计算数组f中元素的梯度,当f为多维时,返回每个维度梯度 |
梯度:连续值之间的变化率,即斜率;
XY坐标轴连续三个X坐标对应的Y轴值:a, b, c,其中,b的梯度是: (c‐a)/2。