numpy.genfromtxt和numpy.loadtxt的区别,以及Unpack

26

我很想知道标题中提到的这两个函数之间的区别。从包含文档的网站上可以看到,它说:numpy.loadtxt 是一个等效函数,当没有数据缺失时。那这是什么意思呢?这是否意味着,比如说,如果我有一个 csv 文件,在两个包含数据的列之间有一个空白列,我就不应该使用 numpy.loadtxt

另外,这是什么意思:

"unpack : bool, optional
If True, the returned array is transposed, so that arguments may be unpacked using x, y, z = loadtxt(...)"

我不太确定这意味着什么。

我会感激你的帮助,谢谢!

2个回答

16

您是正确的。使用np.genfromtxt可以给您一些选项,例如参数missing_valuesfilling_values,可以帮助您处理不完整的csv文件。例如:

1,2,,,5
6,,8,,
11,,,,

可以使用以下方式来阅读:

filling_values = (111, 222, 333, 444, 555) # one for each column
np.genfromtxt(filename, delimiter=',', filling_values=filling_values) 
#array([[   1.,    2.,  333.,  444.,    5.],
#       [   6.,  222.,    8.,  444.,  555.],
#       [  11.,  222.,  333.,  444.,  555.]])

参数unpack在你想把文本文件中的每列内容分别放到不同变量时非常有用。例如,如果你有一个包含x, y, z列的文本文件,则可以使用以下代码进行处理:
x, y, z = np.loadtxt(filename, unpack=True)

请��意,这与其他类似的操作方式相同。
x, y, z = np.loadtxt(filename).T

默认情况下,遍历二维数组意味着遍历行,这就是为什么在此示例中必须转置或使用unpack=True的原因。


6
另一个仅 np.genfromtxt 具有的不错选项:如果您想要一个带有字段的结构化数组,可以使用 names=True,字段名称将自动从文件的第一行生成。 - askewchan

0
在 np.loadtxt 中,文本文件中的每一行必须具有相同数量的值,否则会引发错误。如果没有缺失值,您应该使用 loadtxt。该方法也更轻量级,因此如果可以使用 loadtxt 就使用它。
但是,如果您有缺失值并且需要更多灵活性来修改数据,请使用 np.genfromtxt。它提供了更多的功能,例如 skip_footer、missing_values、filling_values、excludelist、deletechars、replace_space 等等。
请查看 numpy 文档 genfromtxt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接