Python genfromtxt生成看起来像元组的数组,而不是2D数组—;为什么?

Python genfromtxt生成看起来像元组的数组,而不是2D数组—;为什么?,python,import,numpy,genfromtxt,Python,Import,Numpy,Genfromtxt,我正在运行genfromtxt如下所示: date_conv = lambda x: str(x).replace(":", "/") time_conv = lambda x: str(x) a = np.genfromtxt(input.txt, delimiter=',', skip_header=4, usecols=[0, 1] + radii_indices, converters={0: date_conv, 1: time_conv}) 其中input.txt来自

我正在运行
genfromtxt
如下所示:

date_conv = lambda x: str(x).replace(":", "/")
time_conv = lambda x: str(x)

a = np.genfromtxt(input.txt, delimiter=',', skip_header=4,
      usecols=[0, 1] + radii_indices, converters={0: date_conv, 1: time_conv})
其中
input.txt
来自

当我查看结果时,它是1D数组而不是2D数组:

>>> np.shape(a)
(918,)
>>> np.shape(a)
(918, 24)
它似乎是一个元组数组:

>>> a[0]
('06/03/2006', '08:27:23', 6.4e-05, 0.000336, 0.001168, 0.002716, 0.004274, 0.004658, 0.003756, 0.002697, 0.002257, 0.002566, 0.003522, 0.004471, 0.00492, 0.005602, 0.006956, 0.008442, 0.008784, 0.006976, 0.003917, 0.001494, 0.000379, 6.4e-05)
如果我从
genfromtxt
调用中删除转换器规范,它可以正常工作并生成2D数组:

>>> np.shape(a)
(918,)
>>> np.shape(a)
(918, 24)

返回的内容称为结构化数据数组,请参见此处示例:。这是因为您的数据不是同构的,即并非所有元素都具有相同的类型:数据同时包含字符串(前两列)和浮点。Numpy阵列必须是同质的(请参阅以获取解释)

结构化数组通过为每个记录或行使用元组来“解决”这个同质性约束,这就是返回数组为1D的原因:一系列元组,但每个元组(行)由多个字段组成,因此可以将其视为行和列。可以通过
a['nameofcolumn']
访问不同的列,例如
a['Julian_Day']

删除前两列的转换器时,它返回2D数组的原因是,在这种情况下,
genfromtxt
考虑相同类型的所有数据,并返回一个正常的数据数组(默认类型为float,但可以使用
dtype
参数指定)

编辑:如果要使用列名,可以使用
名称
参数(并将
跳过标题设置为仅三个):

您可以执行的操作,例如:

>>> a2['Dateddmmyyyy']
array(['06/03/2006', '06/03/2006', '18/03/2006', '19/03/2006',
       '19/03/2006', '19/03/2006', '19/03/2006', '19/03/2006',
       '19/03/2006', '19/03/2006'], 
      dtype='|S10')