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将数组转置成列向量的形式,方便进行机器学习中的标签和特征分离操作。
极客教程