今天难得有闲暇时间,对numpy的基础进行以下梳理。
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵。
创建数组:
使用列表创建数组,a=['a','b','c']
x = numpy.array(a)
首先介绍以下numpy的索引和切片:
a = np.arange(24).reshape((2,3,4)) #创建两个三行四列的矩阵
a = [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
a[1,:]表示输出第1个矩阵的所有(矩阵编号从0开始),所以此处a[1,:]=[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
a[:,1]表示输出所有矩阵的第一行,a[:,1] = [[ 4 5 6 7]
[16 17 18 19]]
a[:,0:2,1:3]表示输出所有矩阵的第0~2行的第1~3列(注意此处第2行与第3列取不到),a[:,0:2,1:3]=[[[ 1 2]
[ 5 6]]
[[13 14]
[17 18]]]
a[:,:,::2]表示输出所有矩阵所有行列步长为2的所有列(步长可以理解为每次增长的步数),a[:,:,::2]=[[[ 0 2]
[ 4 6]
[ 8 10]]
[[12 14]
[16 18]
[20 22]]]
names = np.array(['a','b','c','a','b','d','e']) #创建索引列
data = np.arange(28).reshape(7,4)
此时数据为下图这样
print(data[names == 'a'])输出索引为Bob的数据,输出结果为[[ 0 1 2 3] [12 13 14 15]]
可以结合切片,例如print(data[name=='a'],::2),输出结果为[[ 0 2]
[12 14]]
numpy的修改操作:
a = np.arange(24).reshape((2,3,4)) a[:,0:2] = [[1,2,3,4],[2,2,3,4]]
输出a的结果为:
[[[ 1 2 3 4]
[ 2 2 3 4]
[ 8 9 10 11]]
[[ 1 2 3 4]
[ 2 2 3 4]
[20 21 22 23]]]
numpy的数据存储:
①.numpy提供了便捷的内部文件存取,将数据存为np专用的npy(二进制格式)或npz(压缩打包格式)格式
②.npy格式以二进制存储数据的,在二进制文件第一行以文本形式保存了数据的元信息(维度,数据类型),可以用二进制工具查看查看内容
③.npz文件以压缩打包文件存储,可以用压缩软件解压
例如:
x = numpy.array(['无敌','是','多么','寂寞'])
np.save('x.npy',x) # 存为.npy文件
y = np.arange(24).reshape(4,6)
np.savez("xy.npz", ar0 = a, ar1 = b)# 多个数组存入一个.npz压缩包
c = np.load('x.npy') # .npy文件读入数组
d = np.load("y.npz") # .npz压缩包读入
d["ar0"] # 单独输出数组
numpy 存储与读取csv文件:
存储:
只能存储ASCII编码格式,csv文件只能存储一维、二维数据,不能存储多维数据
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
其中参数frame代表的含义为文件,可以是.gz等压缩文件,对大数据的存储比较有利,压缩后存取有利于节省资源
array代表存储文件的数组
delimiter代表分割字符串,默认为任何空格
fmt代表写入文件中每个字符串的格式,eg:%s(ASCII字符)
%d(整数)
%.2f(2位小数的浮点数)
%.18e(科学计数法)
读取:
np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
frame代表文件、字符串或产生器,可以是.gz或bz2压缩文件
dtype代表数据类型,可选,代表CSV的字符串以什么数据类型读入数组中,默认np.float
delimiter代表分割字符串,默认是任何空格
skiprows代表跳过前X行,一般跳过第一行表头
usecols代表读取指定的列,索引,原组类型
unpack 如果为True,读入属性将分别写入不同数组变量,如果未False读入数据只写入一个数组变量,默认False