返回介绍

数学基础

统计学习

深度学习

工具

Scala

四、数组的存储和加载

发布于 2023-07-17 23:38:23 字数 7861 浏览 0 评论 0 收藏 0

1. 二进制

  1. numpy.save(file, arr, allow_pickle=True, fix_imports=True):将数组以二进制的形式存储到文件中。

    • file:文件名或者文件对象。如果是个文件名,则会自动添加后缀.npy如果没有该后缀的话
    • arr:被存储的数组
    • allow_pickle:一个布尔值,如果为True,则使用Python pickle。有时候为了安全性和可移植性而不使用pickle
    • fix_imports:用于python3的数组importpython2的情形
  2. numpy.savez(file, *args, **kwds):将多个数组以二进制的形式存储到文件中。

    • file:文件名或者文件对象。如果是个文件名,则会自动添加后缀.npz如果没有该后缀的话

    • args:被存储的数组。这些数组的名字将被自动命名为arr_0/arr_1/...

      如果没有名字,则完全无法知晓这些数组的区别

    • kwds:将被存储的数组,这些关键字参数就是键的名字

  3. 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的数组importpython2的情形
    • encoding:只用于python2,读取python2字符串。

    该函数返回一个数组,元组,或者字典(当二进制文件时savez生成时)

2. 文本文件

  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:用于列数据的格式转换。你可以指定一个字典,字典的键就是列号:

      
      
      xxxxxxxxxx
      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(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0):它作用与genfromtxt相同,但是它只能用于规则比较简单的文件,并且它的解析速度更快。

    • ndim:一个整数。指定结果数组必须拥有不少于ndim维度。
    • 其他参数参考genfromtxt
  3. numpy.fromstring(string, dtype=float, count=-1, sep=''):从raw binary或者字符串中创建一维数组。

    • string:一个字符串,给出数据源
    • dtype:指定数据类型
    • count:一个整数。从数据源(一个字符串)中读取指定数量的数值类型的数值。如果为负数,则为数据长度加上这个负值
    • sep:如果未提供或者为空字符串,则string被认为是二进制数据。如果提供了一个非空字符串,则给出了分隔符。
  4. 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(fid, sep="", format="%s"):保存到文件中。

    • fid:一个file对象或者文件名
    • sep:一个字符串,指定分隔符。如果为空或者空字符串,则按照二进制的方式写入,等价于file.write(a.tobytes())
    • format:一个字符串,指定了数值的格式化方式

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文