如果第一列是 ID,那么您可能不会对其进行任何数学运算。您甚至可能希望它保留 ID 中的任何前导零。因此,字符串可能是比整数更好的数据类型。
您可以创建一个包含复合数据类型的结构化数组。下面我创建了一个记录数组,其中每条记录包含一个 10 字符长度的字符串和两个 32 位整数的空间。
>>> arr = numpy.loadtxt(b"""01 24 54
02 17 968
03 36 23""".split(b"\n"),
dtype=[("id", "a10"),("values", "2i4")])
>>> arr
array([(b'01', [24, 54]), (b'02', [17, 968]), (b'03', [36, 23])],
dtype=[('id', 'S10'), ('values', '<i4', (2,))])
>>> arr["id"]
array([b'01', b'02', b'03'],
dtype='|S10')
>>> arr["values"]
array([[ 24, 54],
[ 17, 968],
[ 36, 23]], dtype=int32)
>>> arr[0]
(b'01', [24, 54])
>>> arr["values"] += 1
>>> arr
array([(b'01', [25, 55]), (b'02', [18, 969]), (b'03', [37, 24])],
dtype=[('id', 'S10'), ('values', '<i4', (2,))])
这里dtype 是一个元组列表,每个元组的第一个元素是字段名称,第二个元素是数据类型。 "a10" 表示 10 个字符的字符串。找出您最长的 ID 有多少个字符,将 10 替换为适当的数量。 2i4 表示 i4 的两列,它是一个 32 位(4 字节)整数。如果需要浮点数,请将 i 更改为 f。如果您需要更高的精度,可以将 64 位数据类型增加 4 到 8。