Numpy: 如果dtype = None,genfromtxt将不会解压

创建于 2014-02-21  ·  6评论  ·  资料来源: numpy/numpy

不知道这是错误还是功能,但是如果我使用:

f_data = np.genfromtxt('file.dat', dtype=None, unpack=True)

其中file.dat是具有几列的标准数据文件(即:http://pastebin.com/ihEW2dxS),结果不会像预期的那样设置unpack=True转置。

例如,行f_data = np.loadtxt('file.dat', unpack=True)按预期工作。

00 - Bug numpy.lib good first issue

最有用的评论

我也经历过 loadtxt有点聪明:

if unpack:
        if len(dtype_types) > 1:
            # For structured arrays, return an array for each field.
            return [X[field] for field in dtype.names]
        else:
            return X.T

为什么genfromtxt不这样做?

所有6条评论

看起来像个错误,除非另行通知,否则将其标记为错误。

我对此进行了调查。

@ Gabriel-p代码的结果是一个形状(12,)的flex数组。 该代码在其上调用output.T ,但是由于它是一维的,因此是无操作的。

dtype=None指定的最大问题是它将是flex数组。 每列都有一个单独的推断类型。 如果要真正转置此结果,则每一行都需要具有一个单独的类型。 AFAIK,唯一的方法是拥有齐次数组的列表或元组。

由于文本文件中的numCols << numRows,使用列表或元组应该没什么大不了的。 如果以这种方式实现,它将按照文档中指定的x, y, z = np.genfromtxt(...)拆包,并解决@ Gabriel-p的问题。

但是, genfromtxt已经超过600行。 有什么想法吗?

也被这个咬了。 我做了一个测试用例,看

https://github.com/hsgg/numpy.git

我也经历过 loadtxt有点聪明:

if unpack:
        if len(dtype_types) > 1:
            # For structured arrays, return an array for each field.
            return [X[field] for field in dtype.names]
        else:
            return X.T

为什么genfromtxt不这样做?

关于此问题有任何更新吗? 自2014年以来似乎从未改变过。

几年前提出的@ moi90建议是正确的。 genfromtxt应该和loadtxt做同样的事情。

我认为这很容易解决,因此我将该问题标记为“良好的第一期”。

此页面是否有帮助?
0 / 5 - 0 等级