Numpy genfromtxt和loadtxt函数有何区别

Numpy genfromtxt和loadtxt函数有何区别

在Numpy中,有两个主要用于读取文本文件的函数:genfromtxtloadtxt。这两个函数都可以读取以文本形式存储的数据,具体使用方法如下。

阅读更多:Numpy 教程

genfromtxt

genfromtxt函数是一个强大的函数,可以自动填充缺失数据或过滤不需要的数据,同时还可以读取各种格式的文件。genfromtxt的基本语法如下:

np.genfromtxt(fname, delimiter=None, skip_header=0, skip_footer=0, 
              dtype=float, filling_values=None, usecols=None)
Python

其中,参数fname表示读取的文件名,delimiter表示分隔符,skip_headerskip_footer表示需要跳过的行数(默认为0),dtype表示读取的数据类型,filling_values表示缺失值的填充方式,usecols表示需要读取的列数。

例如,我们有以下文件data.txt

name, age, gender
Alice, 20, F
Bob, 25, M
Charlie, , M
Python

我们可以使用genfromtxt函数读取这个文件:

import numpy as np

data = np.genfromtxt('data.txt', delimiter=',', skip_header=1, dtype=str)
print(data)
Python

输出为:

[['Alice' ' 20' ' F']
 ['Bob' ' 25' ' M']
 ['Charlie' '' ' M']]
Python

可以看到,genfromtxt函数自动将缺失值填充为了空字符串。

loadtxt

loadtxt函数比genfromtxt函数更简单,但是不能像genfromtxt函数一样自动填充数据或过滤不需要的数据。loadtxt的基本语法如下:

np.loadtxt(fname, delimiter=None, skiprows=0, usecols=None, dtype=float)
Python

其中,参数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)
Python

输出为:

[['Alice' ' 20' ' F']
 ['Bob' ' 25' ' M']
 ['Charlie' '' ' M']]
Python

可以看到,loadtxt函数与genfromtxt函数的结果一样。

参数unpack的作用

在使用genfromtxtloadtxt函数读取数据时,有一个非常有用的参数unpack。该参数的作用是将读取的数组进行转置,变成列向量。例如:

import numpy as np

data = np.genfromtxt('data.txt', delimiter=',', skip_header=1, dtype=str, unpack=True)
print(data)
Python

输出为:

[['Alice' 'Bob' 'Charlie']
 [' 20' ' 25' '']
 [' F' ' M' ' M']]
Python

可以看到,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)
Python

输出为:

Label: [' F' ' M' ' M']
Feature: [[20. 25.  0.]
 [ 0. 0.  0.]]
Python

可以看到,使用unpack参数后,我们可以直接使用切片的方式将数据分离出来,而不用再使用转置操作。

总结

在Numpy中,genfromtxtloadtxt函数都可以读取以文本形式存储的数据,但genfromtxt函数更强大,可以自动填充缺失数据和过滤不需要的数据,同时还可以读取各种格式的文件。loadtxt函数比较简单,不能进行自动填充数据或过滤数据的操作。在读取数据时,可以使用参数unpack将数组转置成列向量的形式,方便进行机器学习中的标签和特征分离操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册