1 回答
TA贡献1851条经验 获得超3个赞
让我们创建一个更简单的数组,并尝试设置一些值:
In [14]: dt = np.dtype([('foo','U10'),('bar',int)])
In [16]: arr = np.zeros(3, dtype=dt)
In [17]: arr
Out[17]: array([('', 0), ('', 0), ('', 0)], dtype=[('foo', '<U10'), ('bar', '<i8')])
In [18]: arr[1]
Out[18]: ('', 0)
In [19]: arr[1] = 12
In [20]: arr
Out[20]:
array([('', 0), ('12', 12), ('', 0)],
dtype=[('foo', '<U10'), ('bar', '<i8')])
注意字符串 '12' 和整数 12 的混合。
设置一个元组,每个字段一个值:
In [21]: arr[2] = ('dog',23)
设置None失败,因为它不能转换None为整数,如第二个字段所要求的那样。
In [22]: arr[0] = None
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-2f7a4c897706> in <module>
----> 1 arr[0] = None
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
In [23]: arr
Out[23]:
array([('None', 0), ('12', 12), ('dog', 23)],
dtype=[('foo', '<U10'), ('bar', '<i8')])
实际上它确实设法设置了字符串字段。
arr是一个数组,其中每个元素必须具有相同的dtype.
具有 dtype 的数组的object行为更像一个列表。虽然偶尔有用,但它不应该用作列表的替代品。
添加回答
举报