Python 学习笔记(14)

本文详细介绍了Numpy中的数组广播机制,包括维度匹配原则及运算过程,并深入探讨了如何利用Numpy的loadtxt和savetxt函数读写文本文件,以及如何处理各种格式的文件,如CSV和二进制格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组广播机制

对于 Numpy 来说,维度匹配当且仅当:

维度相同
有一个的维度是1
匹配会从最后一维开始进行,直到某一个的维度全部匹配为止,因此对于以下情况,Numpy 都会进行相应的匹配:

ABResult
3d array: 256 x 256 x 31d array: 33d array: 256 x 256 x 3
4d array: 8 x 1 x 6 x 13d array: 7 x 1 x 53d array: 8 x 7 x 6 x 5
3d array: 5 x 4 x 31d array: 13d array: 5 x 4 x 3
3d array: 15 x 4 x 131d array: 15 x 1 x 133d array: 15 x 4 x 13
2d array: 4 x 11d array: 32d array: 4 x 3

匹配成功后,Numpy 会进行运算得到相应的结果。

数组读写

  1. 从文本中读取数组

loadtxt 函数

loadtxt(fname, dtype=<type 'float'>, 
        comments='#', delimiter=None, 
        converters=None, skiprows=0, 
        usecols=None, unpack=False, ndmin=0)

loadtxt 有很多可选参数,其中 delimiter 就是刚才用到的分隔符参数。
skiprows 参数表示忽略开头的行数,可以用来读写含有标题的文本

使用 loadtxt 方法读取空格(制表符)分割的文本

使用 loadtxt 方法读取逗号分隔文件

In [10]:
%%writefile myfile.txt
 -- BEGINNING OF THE FILE
% Day, Month, Year, Skip, Power
01, 01, 2000, x876, 13 % wow!
% we don't want have Jan 03rd
04, 01, 2000, xfed, 55
Overwriting myfile.txt

 In [11]:
data = np.loadtxt('myfile.txt', 
                  skiprows=1,         #忽略第一行
                  dtype=np.int,      #数组类型
                  delimiter=',',     #逗号分割
                  usecols=(0,1,2,4), #指定使用哪几列数据
                  comments='%'       #百分号为注释符
                 )
data

Out[11]:  
array([[   1,    1, 2000,   13],
       [   4,    1, 2000,   55]])

读写各种格式的文件
如下表所示:

文件格式使用的包函数
txtnumpyloadtxt, genfromtxt, fromfile, savetxt, tofile
csvcsvreader, writer
Matlabscipy.ioloadmat, savemat
hdfpytables, h5py
NetCDFnetCDF4, scipy.io.netcdfnetCDF4.Dataset, scipy.io.netcdf.netcdf_file
文件格式使用的包备注
wavscipy.io.wavfile音频文件
jpeg,png,…PIL, scipy.misc.pilutil图像文件
fitspyfits天文图像

此外, pandas ——一个用来处理时间序列的包中包含处理各种文件的方法。

将数组写入文件

将数组写入文件 savetxt函数
savetxt(fname,
X,
fmt=’%.18e’,
delimiter=’ ‘,
newline=’\n’,
header=’’,
footer=’’,
comments=’# ')

Numpy 二进制格式

数组可以储存成二进制格式,
单个的数组保存为 .npy 格式,
多个数组保存为多个.npy文件组成的 .npz 格式,每个 .npy 文件包含一个数组。

与文本格式不同,二进制格式保存了数组的 shape, dtype 信息,以便完全重构出保存的数组。

保存的方法:

  • save(file, arr) 保存单个数组,.npy 格式
  • savez(file, *args, **kwds) 保存多个数组,无压缩的 .npz 格式
  • savez_compressed(file, *args, **kwds) 保存多个数组,有压缩的 .npz 格式

读取的方法:

  • load(file, mmap_mode=None) 对于 .npy,返回保存的数组,对于 .npz,返回一个名称-数组对组成的字典。

示例:

  • 单个数组的读写
a = np.array([[1.0,2.0], [3.0,4.0]])

fname = 'afile.npy'
np.save(fname, a)

In [25]:
aa = np.load(fname)
aa
  • 保存多个数组
a = np.array([[1.0,2.0], 
              [3.0,4.0]])
b = np.arange(1000)
np.savez('data.npz', a=a, b=b)


载入数据:data = np.load('data.npz')
载入后可以像字典一样进行操作:

list(data.keys())  #读取字典的关键字
data['a']   #读取关键字对应的值
 data['b'].shape #读取b的维度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值