当前位置: 首页 > 面试题库 >

numpy.genfromtxt生成看起来像元组的数组,而不是2D数组-为什么?

周鸿云
2023-03-14
问题内容

我的运行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,)

它似乎是一个元组数组:

>>> 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, 24)

问题答案:

返回的结果称为 结构化ndarray
,例如,请参见此处:http :
**//docs.scipy.org/doc/numpy/user/basics.rec.html**
。这是因为您的数据不是同质的,即并非所有元素都具有相同的类型:数据既包含字符串(前两列)又包含浮点数。Numpy数组必须是同质的(请参阅此处以获得解释)。


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

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

编辑 :如果要使用列名,则可以使用names参数(并且skip_header仅将参数设置为3):

a2 = np.genfromtxt("input.txt", delimiter=',', skip_header=3, names = True, dtype = None,
                  usecols=[0, 1] + radii_indices, converters={0: date_conv, 1: time_conv})

你可以做例如:

>>> 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')


 类似资料:
  • 问题内容: 我正在尝试该功能。 从numpy文档中,我了解到,如果仅给出一个数组作为输入,它应该返回该数组非零的索引(即“ True”): 如果仅给出条件,则返回元组condition.nonzero(),其中condition为True的索引。 但是,如果尝试一下,它将返回一个包含两个元素的 元组 ,其中第一个是所需的索引列表,第二个是空元素: 所以问题是:为什么?这种行为的目的是什么?在什么情

  • 问题内容: 我尝试运行如下代码: 我认为的形状应为(1,3)而不是(3,)。 矩阵返回的结果应为: 数组([[23],[53],[83]]) 不 数组([23,53,83]) 为什么会发生结果? 问题答案: 顾名思义,该函数的主要目的是通过在两个形状相同的数组上执行 传统的线性代数点积 来提供标量结果。 鉴于这一主要目的,在文档中也对这种情况下的第一(第一子弹下方点)谈到: 您的案件已在他的评论的

  • 问题内容: 我有一个形状为(x,y)的2d数组,我想将其转换为形状为(x,y,1)的3d数组。有没有很好的Pythonic方式可以做到这一点? 问题答案: 除了其他答案,您还可以将切片与结合使用: 甚至这个(可以在任意数量的尺寸下使用):

  • 问题内容: 在JavaScript中,是否可以从2D数组生成HTML表?编写HTML表的语法往往非常冗长,因此我想从2D JavaScript数组生成HTML表,如下所示: 会成为: 因此,我试图编写一个JavaScript函数,该函数将从2D JavaScript数组返回一个表,如下所示: 问题答案: 这是一个将使用dom而不是字符串连接的函数。

  • 我一直得到错误: TypeError:列表索引必须是整数或片,而不是元组 尽管如此,就我有限的理解而言,列表索引是一个整数。 此代码: 给我上面的TypeError。 虽然当我这样做的时候: 这是怎么回事?

  • 问题内容: 我一直在阅读Go,并为这个基本问题感到困惑。 在Go中,很明显,切片更灵活,并且在需要一系列数据时通常可以代替数组使用。 阅读了大多数文档,他们似乎鼓励开发人员只使用切片而不是数组。我得到的印象是,创建者可以简单地将数组设计为可调整大小的,而无需整个切片部分即可完成。实际上,这样的设计会使该语言更易于理解,甚至鼓励使用更多惯用的代码。 那么,为什么创建者首先要允许数组呢?什么时候可以使