[英]numpy genfromtxt - infer column header if headers not provided
我知道使用genfromtxt
, defaultfmt
参数可用于推断默认列名,如果列名不在输入数据中,这很有用。 如果没有提供defaultfmt
,则默认为f%i
。 例如
>>> data = StringIO("1 2 3\n 4 5 6")
>>> np.genfromtxt(data, dtype=(int, float, int))
array([(1, 2.0, 3), (4, 5.0, 6)],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<i8')])
所以这里我们有自动生成的列名f0
, f1
, f2
。
但是,如果我想要什么numpy的推断都列标题和数据类型? 我以为你是用dtype=None
来做的。 像这样
>>> data3 = StringIO("1 2 3\n 4 5 6")
>>> np.genfromtxt(data3, dtype=None, ???) # some parameter combo
array([(1, 2, 3), (4, 5, 6)],
dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<i8')])
我仍然想要f0
, f1
...等自动生成的列名。 我希望 numpy 根据数据自动确定数据类型,我认为这是执行dtype=None
的全部意义所在。
编辑但不幸的是,这并不总是有效。
当我同时拥有浮点数和整数时,这种情况有效。
>>> data3b = StringIO("1 2 3.0\n 4 5 6.0")
>>> np.genfromtxt(data3b, dtype=None)
array([(1, 2, 3.), (4, 5, 6.)],
dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<f8')])
因此 numpy 正确推断出前 2 列的 i8 数据类型和最后一列的 f8 数据类型。
但是,如果我提供所有整数,推断的列名称就会消失。
>>> data3c = StringIO("1 2 3\n 4 5 6")
>>> np.genfromtxt(data3c, dtype=None)
array([[1, 2, 3],
[4, 5, 6]])
我的相同代码可能会或可能不会根据输入数据工作? 这听起来不对。
是的,我知道有熊猫。 但我不是故意使用熊猫。 所以请多多包涵。
In [2]: txt = '''1,2,3
...: 4,5,6'''.splitlines()
Defaylt 二维浮游物阵列:
In [6]: np.genfromtxt(txt, delimiter=',',encoding=None)
Out[6]:
array([[1., 2., 3.],
[4., 5., 6.]])
整数的 2d:
In [7]: np.genfromtxt(txt, dtype=None, delimiter=',',encoding=None)
Out[7]:
array([[1, 2, 3],
[4, 5, 6]])
指定的字段数据类型:
In [8]: np.genfromtxt(txt, dtype='i,i,i', delimiter=',',encoding=None)
Out[8]:
array([(1, 2, 3), (4, 5, 6)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])
指定的字段名称:
In [9]: np.genfromtxt(txt, dtype=None, delimiter=',',encoding=None, names=['a','b','c'])
Out[9]:
array([(1, 2, 3), (4, 5, 6)],
dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
非结构化数组可以转换为结构化数组:
In [10]: import numpy.lib.recfunctions as rf
In [11]: rf.unstructured_to_structured(Out[7])
Out[11]:
array([(1, 2, 3), (4, 5, 6)],
dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<i8')])
在numpy
,默认的首选数组是多维数值。 这就是为什么它会产生Out7]
如果可以的话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.