Numpy genfromtxt和loadtxt函数有何区别
在Numpy中,有两个主要用于读取文本文件的函数:genfromtxt
和loadtxt
。这两个函数都可以读取以文本形式存储的数据,具体使用方法如下。
阅读更多:Numpy 教程
genfromtxt
genfromtxt
函数是一个强大的函数,可以自动填充缺失数据或过滤不需要的数据,同时还可以读取各种格式的文件。genfromtxt
的基本语法如下:
np.genfromtxt(fname, delimiter=None, skip_header=0, skip_footer=0,
dtype=float, filling_values=None, usecols=None)
其中,参数fname
表示读取的文件名,delimiter
表示分隔符,skip_header
和skip_footer
表示需要跳过的行数(默认为0),dtype
表示读取的数据类型,filling_values
表示缺失值的填充方式,usecols
表示需要读取的列数。
例如,我们有以下文件data.txt
:
name, age, gender
Alice, 20, F
Bob, 25, M
Charlie, , M
我们可以使用genfromtxt
函数读取这个文件:
import numpy as np
data = np.genfromtxt('data.txt', delimiter=',', skip_header=1, dtype=str)
print(data)
输出为:
[['Alice' ' 20' ' F']
['Bob' ' 25' ' M']
['Charlie' '' ' M']]
可以看到,genfromtxt
函数自动将缺失值填充为了空字符串。
loadtxt
loadtxt
函数比genfromtxt
函数更简单,但是不能像genfromtxt
函数一样自动填充数据或过滤不需要的数据。loadtxt
的基本语法如下:
np.loadtxt(fname, delimiter=None, skiprows=0, usecols=None, dtype=float)
其中,参数fname
表示读取的文件名,delimiter
表示分隔符,skiprows
表示需要跳过的行数(默认为0),usecols
表示需要读取的列数,dtype
表示读取的数据类型。
我们可以使用loadtxt
函数读取上面的文件data.txt
:
import numpy as np
data = np.loadtxt('data.txt', delimiter=',', skiprows=1, dtype=str)
print(data)
输出为:
[['Alice' ' 20' ' F']
['Bob' ' 25' ' M']
['Charlie' '' ' M']]
可以看到,loadtxt
函数与genfromtxt
函数的结果一样。
参数unpack
的作用
在使用genfromtxt
或loadtxt
函数读取数据时,有一个非常有用的参数unpack
。该参数的作用是将读取的数组进行转置,变成列向量。例如:
import numpy as np
data = np.genfromtxt('data.txt', delimiter=',', skip_header=1, dtype=str, unpack=True)
print(data)
输出为:
[['Alice' 'Bob' 'Charlie']
[' 20' ' 25' '']
[' F' ' M' ' M']]
可以看到,data
变成了一个二维数组,每一行表示一个属性(姓名、年龄、性别),每一列表示一个数据,即每个人的姓名、年龄和性别。这在机器学习中非常有用,例如我们需要从数据中分离出标签和特征时,使用unpack
参数可以非常方便地进行转置,代码如下:
import numpy as np
data = np.genfromtxt('data.txt', delimiter=',', skip_header=1, dtype=str, unpack=True)
# 分离标签和特征
label = data[2]
feature = data[:2].astype(float)
print('Label:', label)
print('Feature:', feature)
输出为:
Label: [' F' ' M' ' M']
Feature: [[20. 25. 0.]
[ 0. 0. 0.]]
可以看到,使用unpack
参数后,我们可以直接使用切片的方式将数据分离出来,而不用再使用转置操作。
总结
在Numpy中,genfromtxt
和loadtxt
函数都可以读取以文本形式存储的数据,但genfromtxt
函数更强大,可以自动填充缺失数据和过滤不需要的数据,同时还可以读取各种格式的文件。loadtxt
函数比较简单,不能进行自动填充数据或过滤数据的操作。在读取数据时,可以使用参数unpack
将数组转置成列向量的形式,方便进行机器学习中的标签和特征分离操作。