Pythonnumpy读写文件

Posted KmBase

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pythonnumpy读写文件相关的知识,希望对你有一定的参考价值。

官网

https://numpy.org/doc/stable/reference/routines.io.html

文本文件

读取文本文件

说明

  1. np.loadtxt()
  • 文件格式:纯文本文件,每行数据可以是不同的数据类型。
  • 参数设置:常用参数包括 delimiter 指定分隔符、dtype 指定数据类型、skiprows 指定跳过的行数等。
  • 适用场景:适用于读取简单的纯文本数据,例如一组实验数据。
  1. np.genfromtxt()
  • 文件格式:纯文本文件,可以处理缺失数据和不规则数据。
  • 参数设置:常用参数包括 delimiter 指定分隔符、dtype 指定数据类型、skip_header 指定跳过的头部行数、missing_values 指定缺失值等。
  • 适用场景:适用于读取不规则的纯文本数据,例如含有缺失值或空行的数据。
  1. np.recfromtxt()
  • 文件格式:纯文本文件,可以处理缺失数据和不规则数据。
  • 参数设置:常用参数和 np.genfromtxt() 类似。
  • 适用场景:适用于读取带有列名的结构化数据,例如实验数据表格。
  1. np.recfromcsv()
  • 文件格式:CSV 文件,每行数据通常是相同的数据类型。
  • 参数设置:常用参数和 delimiter 指定分隔符、dtype 指定数据类型、skip_header 指定跳过的头部行数等。
  • 适用场景:适用于读取带有列名的 CSV 数据,例如实验数据表格。

区别

  • np.loadtxt():用于从文本文件中读取数据并将其存储为 NumPy 数组。默认情况下,此函数假定数据是数字,以空格为分隔符,并且没有标题行。此外,您可以指定数据类型,跳过特定行或列等选项。
  • np.genfromtxt():与 loadtxt() 类似,但更灵活。它可以处理缺失值,不同的分隔符,不同的数据类型,以及不同的文本文件格式(例如 CSV,TSV,等)。此外,它还可以处理带有标题行和注释行的数据文件。
  • np.recfromtxt():与 genfromtxt() 类似,但它创建的是结构化数组,其中每列可以具有不同的数据类型,并且每列可以用标题来标识。
  • np.recfromcsv():与 recfromtxt() 类似,但是它只能处理 CSV 文件格式,并且默认情况下使用逗号作为分隔符。

写入文本文件

np.savetxt()

  • 文件格式:纯文本文件,每行数据可以是不同的数据类型。
  • 参数设置:常用参数包括 delimiter 指定分隔符、fmt 指定输出格式等。
  • 适用场景:适用于将一组实验数据保存到纯文本文件中。

二进制文件

读取二进制文件

说明

  1. np.load()
  • 文件格式:NumPy 二进制文件。
  • 参数设置:常用参数包括 allow_pickle 指定是否允许加载 pickled 对象、mmap_mode 指定内存映射模式等。
  • 适用场景:适用于加载保存了 NumPy 数组的二进制文件。
  1. np.fromfile()
  • 文件格式:任意二进制文件。
  • 参数设置:常用参数包括 dtype 指定数据类型、count 指定要读取的元素个数等。
  • 适用场景:适用于读取大型的二进制文件,例如图像数据。

区别

  • np.load():用于从 NumPy 专用二进制文件(.npy,.npz)中加载数据。这些文件由 np.save()np.savez() 函数创建,可以在磁盘上保存 NumPy 数组以及它们的元数据(例如数据类型,形状等)。np.load() 函数可以轻松地读取这些文件,并将它们还原为原始的 NumPy 数组。
  • np.fromfile():用于从二进制文件中加载数据,并将其存储为 NumPy 数组。这个函数假定文件中的数据是连续的,并且按照指定的数据类型进行编码。因此,您需要指定数据类型和数组的形状,以便将读取的数据正确地解释为 NumPy 数组。

总之,np.load()np.fromfile() 都可以用于从文件中加载数据,但是 np.load() 专门用于加载 NumPy 二进制文件,而 np.fromfile() 用于加载二进制文件,需要手动指定数据类型和形状。

写入 NumPy 二进制文件

说明

  1. np.save()
  • 文件格式:NumPy 二进制文件。
  • 参数设置:常用参数包括 allow_pickle 指定是否允许 pickle 对象、fix_imports 指定是否修复 Python 2 和 Python 3 之间的差异等。
  • 适用场景:适用于将 NumPy 数组保存到二进制文件中。
  1. np.savez()
  • 文件格式:压缩的 NumPy 二进制文件。
  • 参数设置:常用参数包括 allow_picklefix_imports**arrays 等。
  • 适用场景:适用于将多个 NumPy 数组保存到一个压缩的二进制文件中。
  1. np.savez_compressed()
  • 文件格式:压缩的 NumPy 二进制文件。
  • 参数设置:常用参数和 np.savez() 类似。
  • 适用场景:适用于将多个 NumPy 数组保存到一个高度压缩的二进制文件中,节省存储空间。

区别

  • np.save():将单个 NumPy 数组保存到磁盘上的二进制文件(.npy)中。这个文件只包含数组的原始数据,不包含任何元数据(例如数据类型,形状等)。因此,当您加载这个文件时,您需要知道原始数组的元数据才能正确地解释数据。
  • np.savez():将多个 NumPy 数组保存到磁盘上的压缩二进制文件(.npz)中。这个文件包含多个数组以及它们的元数据。这个文件可以通过索引来访问每个数组,就像一个字典一样。这个函数的参数是一系列的 NumPy 数组,每个数组都需要指定一个名称,以便在加载文件时可以引用它。
  • np.savez_compressed():与 np.savez() 类似,但是它在保存时使用了更高的压缩比率,因此生成的文件更小。这个函数的参数与 np.savez() 相同,生成的文件名也是以 .npz 文件扩展名结尾。

重学pythonnumpy

#-*- encoding:utf-8 -*-
#创建数据
import numpy as np
a = np.array([1, 2, 4])
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b[1, 2] = 99
#获取数组的大小
print a.shape
print b.shape
#获取数组的类型
print a.dtype
print b
#创建结构数组
persontype = np.dtype(
    'names': ['name', 'sex', 'chinese', 'math', 'english'],
    'formats': ['S32', 'S32', 'i', 'i', 'f']
)
people = np.array([("XiaoYu", "woman", "100", "90", "59"),
                   ("XiaoLin", "woman", "90", "10", "80"),
                   ("XiaoLi", "man", "43", "43", "99.9"),
                   ("LV", "non", "30", "90", "40.3")],dtype=persontype)
print people
#获取所有哦姓名
names = people[:]["name"]
print names
#获取语文的平均分数
chinese = people[:]["chinese"]
print np.mean(chinese)
#获取数学的最大成绩
math = people[:]["math"]
print np.amax(math)

#获取一个数组[1, 3, 5, 7, 9]
x1 = np.arange(1, 10, 2)
print x1
##线性等分向量
x2 = np.linspace(1, 9, 5)
print x2
#数组之间的加减乘除、N次方,取余
print np.add(x1, x2)
print np.subtract(x1, x2)
print np.multiply(x1, x2)
print np.divide(x1, x2)
print np.power(x1, 3)
print np.power(x1, x2)
print np.remainder(x1, x2)

#统计函数
b = np.array([[1, 2, 10], [4, 5, 6], [7, 8, 9]])
print np.amin(b)
#获取每一列的最小值, 行话叫axis=0 轴
print np.amin(b, 0)
#获取每一行的最小值
print np.amin(b, 1)
#获取最大值和最小值之差
print np.ptp(b)
print np.ptp(b, 0)
print np.ptp(b, 1)
#统计数组的百分位数,p=50相当于求平均值,p的范围是0-100
print np.percentile(b, 100)
print np.percentile(b, 50, 0)
print np.percentile(b, 30, axis=1)
#统计数组的中位数
print np.median(b)
print np.median(b, 0)
#计算加权平均书(加权平均数的计算方法,我小妹都知道~)
c = np.array([1, 2, 3, 4])
wts = np.array([1, 2, 3, 4])
print np.average(c)
print np.average(c, weights=wts)
#统计数组的标准差,标准差是方差的算术平方根
print np.std(c)
#统计数组的方差,每个数值与平均值之差的平方求和的平均
print np.var(c)
##做个验证
print np.power(np.std(c), 2)

#数组的排序,
d = np.array([[4, 6, 1], [3, 5, 2]])
#默认参数sort(a, axis=-1, kind=‘quicksort’, order=None),-1为数组的最后一个轴,指定 quicksort、mergesort、heapsort 分别表示快速排序、合并排序、堆排序
print np.sort(d)
print np.sort(d, axis=None)
# 用 NumPy 统计下在语文、英语、数学中的平均成绩、最小成绩、最大成绩、方差、标准差。
# 然后把这些人的总成绩排序,得出名次进行成绩输出。
# 构建数据
studenttype = np.dtype(
    'names': ['name', 'chinese', 'english', 'math', 'total'],
    'formats': ['S32', 'f', 'f', 'f','f']
)
students = np.array([('lv', 66, 65, 30, 0),
                     ('ly', 95, 85, 98, 0),
                     ('bfd', 93, 92, 96, 0),
                     ('mi', 90, 88, 77, 0),
                     ('baidu', 80, 90, 90, 0)],dtype=studenttype)
#计算语文的平均成绩
print np.mean(students[:]["chinese"])
#计算数学的最小值
print np.amin(students[:]["math"])
#计算英语的最大成绩
print np.amax(students[:]["english"])
#计算语文的方差
print np.var(students[:]["chinese"])
#语文的标准差
print np.std(students[:]["chinese"])
print "======总成绩排序======="
print students[:]["chinese"]
students[:]["total"] = np.add(np.add(students[:]["chinese"], students[:]["math"]), students[:]["english"])
print np.sort(students,order="total")

不要太在意别人的评价,做自己喜欢的事情就好~温故而知新嘛

以上是关于Pythonnumpy读写文件的主要内容,如果未能解决你的问题,请参考以下文章

Pythonnumpy常用API整理汇总

pythonNumpy中stack(),hstack(),vstack()函数详解

python numpy

Python NumPy - 3D 数组的角度切片

Python Numpy:用另一个数组中的对应值替换一个数组中的值

python numpy错误“TypeError:'numpy.float64'对象不能解释为整数”