dtype=None 告诉 genfromtxt 猜测适当的 dtype。
来自the docs:
dtype:dtype,可选
结果数组的数据类型。 如果没有,dtypes 将是
由每列的内容单独确定。
(我的重点。)
由于您的数据是逗号分隔的,请务必包含delimiter=',',否则np.genfromtxt 会将每一列(除最后一列)解释为包含一个字符串字符(逗号),因此会错误地为每个列分配一个字符串 dtype这些列。
例如:
import numpy as np
arr = np.genfromtxt('data', dtype=None, delimiter=',')
print(arr.dtype)
# [('f0', '<f8'), ('f1', 'S4'), ('f2', '<i4'), ('f3', '<f8'), ('f4', '<f8')]
这显示了每列的名称和数据类型。例如,('f3', <f8) 表示第四列的名称为 'f3' 并且是 dtype 'i 表示它是一个整数 dtype。如果您需要第三列是 float dtype,那么有几个选项。
- 您可以通过添加小数点手动编辑数据
第三列强制 genfromtxt 解释该列中的值
为浮点数据类型。
-
您可以在对 genfromtxt 的调用中明确提供 dtype
arr = np.genfromtxt(
'data', delimiter=',',
dtype=[('f0', '<f8'), ('f1', 'S4'), ('f2', '<f4'), ('f3', '<f8'), ('f4', '<f8')])
print(arr)
# [(999.9, ' abc', 34, 78.0, 12.3) (1.3, ' ghf', 12, 8.4, 23.7)
# (101.7, ' evf', 89, 2.4, 11.3)]
print(arr['f2'])
# [34 12 89]
错误信息IndexError: invalid index正在由该行生成
ionenergy = y[:,0]
当你有混合数据类型时,np.genfromtxt 返回一个structured array。您需要阅读结构化数组,因为访问列的语法与用于同质 dtype 的普通数组的语法不同。
代替y[:, 0],要访问结构化数组y的第一列,请使用
y['f0']
或者,更好的是,在np.genfromtxt 中提供names 参数,这样您就可以使用更相关的列名,例如y['ionenergy']:
import numpy as np
arr = np.genfromtxt(
'data', delimiter=',', dtype=None,
names=['ionenergy', 'foo', 'bar', 'baz', 'quux', 'corge'])
print(arr['ionenergy'])
# [ 999.9 1.3 101.7]