gpt4 book ai didi

python - CSV dtype 中的 numpy rearray 有很多列,但 shape 只显示一行,这是为什么?

转载 作者:行者123 更新时间:2023-12-01 03:59:35 26 4
gpt4 key购买 nike

我的 CSV 混合了字符串和数字列。 nump.recfromcsv 准确地推断出它们(woo-hoo),给出了 dtype

dtype=[('null', 'S7'), ('00', '<f8'), ('nsubj', 'S20'), ('g', 'S1'), ...

正如您所看到的,字符串和数字的混合。但是 numpy.shape(csv) 给了我

(133433,)

这让我很困惑,因为 dtype 暗示它是列感知的。此外,它可以直观地访问:

csv[1]
> ('def', 0.0, 'prep_to', 'g', 'query_w', 'indef', 0.0, ...

我也收到错误

cannot perform reduce with flexible type

在 .all() 等操作上,即使与数字列一起使用也是如此。我不确定我是否真的正在使用类似表格的实体(二维)或只是某物的一个列表。为什么dtype与shape不一致?

最佳答案

重新数组是一个记录数组。每条记录可以有多个字段。记录有点像 C 中的结构。

如果记录数组的形状为(133433,),则记录数组是一维记录数组。

重新数组的字段可以通过基于名称的方式访问索引。例如,csv['nsub'] 本质上相当于

np.array([record['nsub'] for record in csv])

这种特殊的基于名称的索引支持一维数组是二维数组的错觉 - csv[intval] 选择行,csv[fieldname] 选择“列”。然而,在幕后并严格如果形状是 (133433,) 那么它就是一维的。

请注意,并非所有重新排列都是一维的。可以进行更高维的重新排列,

In [142]: arr = np.zeros((3,2), dtype=[('foo', 'int'), ('bar', 'float')])

In [143]: arr
Out[143]:
array([[(0, 0.0), (0, 0.0)],
[(0, 0.0), (0, 0.0)],
[(0, 0.0), (0, 0.0)]],
dtype=[('foo', '<i8'), ('bar', '<f8')])

In [144]: arr.shape
Out[144]: (3, 2)

这是一个二维数组,其元素是记录。

以下是 arr[:, 0] 切片中的 bar 字段值:

In [148]: arr[:, 0]['bar']
Out[148]: array([ 0., 0., 0.])

以下是二维数组中的所有 bar 字段值:

In [151]: arr['bar']
Out[151]:
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])

In [160]: arr['bar'].all()
Out[160]: False

请注意,使用重新排列的替代方法是 Pandas Dataframes 。除了重新排列之外,还有更多的方法可用于操作数据帧。您可能会发现它更方便。

关于python - CSV dtype 中的 numpy rearray 有很多列,但 shape 只显示一行,这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36831072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com