【问题标题】:dtype argument in numpy.genfromtxtnumpy.genfromtxt 中的 dtype 参数
【发布时间】:2018-06-10 03:44:21
【问题描述】:
>>> from io import StringIO
>>> import numpy as np
>>> s = StringIO("1,1.3,abcde")
>>> data = np.genfromtxt(s, dtype=[('myint','i8'),('myfloat','f8'),
... ('mystring','S5')], delimiter=",")
>>> data
array((1, 1.3, 'abcde'),
      dtype=[('myint', '<i8'), ('myfloat', '<f8'), ('mystring', '|S5')])

我的问题与dtype 论点有关。 我无法理解dtype="i8,f8,|S5" 代表什么。 我可以看出 i 是整数,f 是浮点数,s 是字符串,但 i8 中的 8 是什么?我首先理解它的字节,但是 s5 怎么可能。 我了解 dtype 有助于指定数据类型,以便我们可以从 CSV 文件中读取,但有人可以对数据类型提供一些见解

【问题讨论】:

  • "i8,f8,|S5" 是您的 data 显示显示的完整 dtype 的简写。 &lt;i8 是一个 8 字节(64 位)整数,&lt;f8 是普通的 float64S5 是一个 5 个字符的字节串。看data['myint'].dtype,孤立的第一个字段的dtype。

标签: python-3.x numpy genfromtxt


【解决方案1】:

i8f8 中的 8 是字节数。有几种不同的方式来表达相同的datatype in numpy。您从np.genfromtxt 看到的字符串采用紧凑格式。前面的&lt;&gt; 符号表示小端或大端(参见documentation),后跟i 表示整数或f 表示浮点/双精度,以及字节数。

较长的数据类型名称的大小以位而不是字节为单位,这意味着i8int64f4float32 等等。例如:

>>> np.dtype('i8')
dtype('int64')
>>> np.dtype('f4')
dtype('float32')

默认情况下,这些都是小端。如果你想要大端,据我所知,np.dtype 不会返回长格式:

>>> np.dtype('>c16')
dtype('>c16') 

字符串是一种特殊的数据类型,数字表示字符串字符的最大个数。详情请见this question

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2014-02-26
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2018-10-09
    相关资源
    最近更新 更多