Numpy---4.数组的存储和加载
一、二进制
1.numpy.save()
1 | numpy.save( file , arr, allow_pickle = True , fix_imports = True ) |
功能:将数组以二进制的形式存储到文件中
参数:
file
:文件名或者文件对象。如果是个文件名,则会自动添加后缀.npy
如果没有该后缀的话arr
:被存储的数组allow_pickle
:一个布尔值,如果为True
,则使用Python pickle
。有时候为了安全性和可移植性而不使用pickle
fix_imports
:用于python3
的数组import
到python2
的情形
2.numpy.savez()
1 | numpy.savez( file , * args, * * kwds) |
功能:将多个数组以二进制的形式存储到文件中。
参数:
-
file
:文件名或者文件对象。如果是个文件名,则会自动添加后缀.npz
如果没有该后缀的话 -
args
:被存储的数组。这些数组的名字将被自动命名为arr_0/arr_1/...;
-
如果没有名字,则完全无法知晓这些数组的区别
-
-
kwds
:将被存储的数组,这些关键字参数就是键的名字
3.numpy.load()
1 | numpy.load( file , mmap_mode = None , allow_pickle = True , fix_imports = True , encoding = 'ASCII' ) |
功能:将二进制文件中读取数组
参数:
file
:一个文件名或者文件对象。它存放着数组mmap_mode
:如果不是None
,则memory-map
该文件。此时对数组的修改会同步到文件上。当读取大文件的一小部分时很有用,因为它不必一次读取整个文件。可选值为None/'r+'/'r'/'w+'/'c'
allow_pickle
:一个布尔值,如果为True
,则使用Python pickle
。有时候为了安全性和可移植性而不使用pickle
fix_imports
:用于python3
的数组import
到python2
的情形encoding
:只用于python2
,读取python2
字符串。
该函数返回一个数组,元组,或者字典(当二进制文件时savez
生成时)
二、文本文件
1.numpy.genfromtxt()
1 | numpy.genfromtxt(fname, dtype = < type 'float' >, comments = '#' , delimiter = None ,skip_header = 0 , skip_footer = 0 , converters = None , missing_values = None ,filling_values = None , usecols = None , names = None , excludelist = None , deletechars = None , replace_space = '_' , autostrip = False , case_sensitive = True , defaultfmt = 'f%i' , unpack = None , usemask = False , loose = True , invalid_raise = True , max_rows = None ) |
功能 :从文本文件中加载数组,通用性很强,可以处理缺失数据的情况。
loadtxt()
函数只能处理数据无缺失的情况。
参数:
-
fname
:指定的数据源。可以为:- 文件名字符串。如果后缀为
gz
或者bz2
,则首先自动解压缩 - 文件对象/字符串列表/其他可迭代对象:这些可迭代对象必须返回字符串(该字符串被视为一行)
- 文件名字符串。如果后缀为
-
dtype
:数组的元素类型,可以提供一个序列,指定每列的数据类型 -
comments
:一个字符串,其中每个字符都指定了注释行的第一个字符。注释行整体被放弃 -
delimiter
:指定了分隔符。可以为:- 字符串:指定分隔符。默认情况下,所有连续的空白符被认为是分隔符
- 一个整数:指定了每个字段的宽度
- 一个整数序列:依次给出了各个字段的宽度
-
skiprows
:被废弃,推荐使用skip_header
-
skip_header
:一个整数,指定跳过文件头部多少行 -
skip_footer
:一个整数,指定跳过文件尾部多少行 -
converters
:用于列数据的格式转换。你可以指定一个字典,字典的键就是列号:- converters={0: lambda s: float(s or 0), 1: lambda s: int(s or 199),... }
-
missing
:被废弃,推荐使用missing_values
-
missing_values:
指定缺失数据。你可以自定一个字典,字典的键就是缺失位置的字符串,值就是缺失值。比如你可以指定NNNN
为缺失数据,此时遇到NNNN
时,numpy
解析为np.nan
-
filling_values
:指定缺失值的填充值。即解析到np.nan
时,用什么值代替它 -
usecols
:一个序列,指定了要读取那些列(列从0 计数) -
names
:- 如果为
True
,则在skip_header
行之后第一行被视作标题行,将从该行读取每个字段的name
。 - 如果为序列或者一个以冒号分隔的字符串,则使用它作为各个字段的
name
- 如果为
None
,则每个dtype
字段的名字被使用
- 如果为
-
excludelist
:一个序列,给出了需要排除的字段的name
。 -
deletechars
:A string combining invalid characters that must be deleted from the names -
defaultfmt
:A format used to define default field names, such as “f%i” or “f_%02i”. -
autostrip
:一个布尔值。如果为True
,则自动移除数据中的空白符 -
replace_space
:一个字符。如果变量名中有空白符,如user name
,则使用该字符来替代空白符。默认为_
,即变量名转换为user_name
-
case_sensitive
:一个布尔值或者字符串。如果为True
,则字段名是大小写敏感的。如果为False
或者'upper'
,则字段名转换为大写字符。如果为'lower'
则转换为小写字符。 -
unpack:
If True, the returned array is transposed -
usemask:
If True, return a masked array -
loose:
If True, do not raise errors for invalid values -
invalid_raise:
If True, an exception is raised if an inconsistency is detected in the number of columns. If False, a warning is emitted and the offending lines are skipped -
max_rows:
一个整数,指定读取的最大行数。
2.numpy.loadtxt()
1 | numpy.loadtxt(fname, dtype = < type 'float' >, comments = '#' , delimiter = None ,converters = None , skiprows = 0 , usecols = None , unpack = False , ndmin = 0 ) |
功能:作用与genfromtxt
相同,但是它只能用于规则比较简单的文件,并且它的解析速度更快。
参数:
ndim
:一个整数。指定结果数组必须拥有不少于ndim
维度。- 其他参数参考
genfromtxt
3.numpy.fromstring()
1 | numpy.fromstring(string, dtype = float , count = - 1 , sep = '') |
功能:从raw binary
或者字符串中创建一维数组。
参数:
string
:一个字符串,给出数据源dtype
:指定数据类型count
:一个整数。从数据源(一个字符串)中读取指定数量的数值类型的数值。如果为负数,则为数据长度加上这个负值sep
:如果未提供或者为空字符串,则string
被认为是二进制数据。如果提供了一个非空字符串,则给出了分隔符。
4.numpy.savetxt()
1 | numpy.savetxt(fname, X, fmt = '%.18e' , delimiter = ' ' , newline = '\n' , header = ' ',footer=' ', comments=' # ') |
功能:存储到文本文件
参数:
-
fname
:给出了文件名或者file
对象。如果为.gz
后缀,则自动压缩 -
X
:被存储的数组 -
fmt
:一个字符串或者一个字符串序列,指定存储格式。一个字符串可以指定所有的格式化方式;一个字符串序列可以对每列指定一个格式化方式。如果是虚数,你可以通过%.4e%+.4j
的方式指定实部和虚部。 -
delimiter
:一个字符串,用于分隔符,分隔每个列 -
newline
:一个字符串,指定换行符 -
header
:一个字符串。它会写到文件的首行 -
footer
:一个字符串。它会写到文件的末尾 -
comments
:一个字符串。它会写到文件的中间,并且用注释符作为行首,如#
- 注:
fmt
分隔字符串的格式为%[flag]width[.precision]specifier
。其中: -
flags
:可以为'-'
(左对齐)、'+'
(右对齐)、'0'
(左侧填充0) -
width
:最小的位宽。 -
precision
:- 对于
specifier=d/i/o/x
,指定最少的数字个数 - 对于
specifier=e/E/f
,指定小数点后多少位 - 对于
specifier=g/G
,指定最大的significant digits
- 对于
specifier=s
,指定最大的字符数量
- 对于
-
specifier
:指定格式化类型。c
(字符)、d/i
(带符号整数)、e/E
(科学计数法)、f
(浮点数)、g/G
(使用shorter e/E/f
)、o
(带符号八进制)、s
(字符串)、u
(无符号整数)、x/X
(无符号十六进制)
5.ndarray.tofile()
1 | ndarray.tofile(fid, sep = " ", format=" % s") |
功能:保存到文件中
参数:
fid
:一个file
对象或者文件名sep
:一个字符串,指定分隔符。如果为空或者空字符串,则按照二进制的方式写入,等价于file.write(a.tobytes())
format
:一个字符串,指定了数值的格式化方式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
2018-12-27 去掉python的警告