对 numpy 数组中存在的元组中的列进行切片

2024-05-22

我已将一个文本文件导入到 numpy 数组中,如下所示。

data=np.genfromtxt(f,dtype=None,delimiter=',',names=None)

其中 f 包含我的 csv 文件的路径

现在数据包含以下内容。

array([(534, 116.48482, 39.89821, '2008-02-03 00:00:49'),
   (650, 116.4978, 39.98097, '2008-02-03 00:00:02'),
   (675, 116.31873, 39.9374, '2008-02-03 00:00:04'),
   (715, 116.70027, 40.16545, '2008-02-03 00:00:45'),
   (2884, 116.67727, 39.88201, '2008-02-03 00:00:48'),
   (3799, 116.29838, 40.04533, '2008-02-03 00:00:37'),
   (4549, 116.48405, 39.91403, '2008-02-03 00:00:42'),
   (4819, 116.42967, 39.93963, '2008-02-03 00:00:43')],
    dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S19')])

如果我现在尝试进行列切片,即使用提取第一列或第二列

data[:,0]

它说“索引太多”。我发现这是由于它的存储方式所致。所有行都存储为元组而不是列表/数组。 我想到使用“最丑陋”的方式来执行切片而不必使用迭代。这就是将每行中的元组转换为列表并将其放回 numpy 数组。像这样的东西

data=np.asarray([list(i) for i in data])

但对于上述问题,我丢失了每列的数据类型。每个元素将存储为字符串,而不是在前一种情况下自动检测到的整数或浮点数。

现在,如果我想对列进行切片而不必使用迭代,有什么办法吗?


What np.genfromtext为你创建的不是一个元组数组,它​​本来就有objectdtype,而是一个记录数组。你可以从奇怪的 dtype 中看出:

dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S19')]

该列表中的每个元组都保存相应字段的名称及其数据类型,<i4是一个小端4字节整数,<f8一个小端 8 字节浮点数和S1919 个字符长的字符串。您可以按名称访问字段,如下所示:

In [2]: x['f0']
Out[2]: array([ 534,  650,  675,  715, 2884, 3799, 4549, 4819])

In [3]: x['f1']
Out[3]: 
array([ 116.48482,  116.4978 ,  116.31873,  116.70027,  116.67727,
        116.29838,  116.48405,  116.42967])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 numpy 数组中存在的元组中的列进行切片 的相关文章

随机推荐