[英]How do you set an entry in a numpy array to 0 or None if the entries are structured arrays themselves?
我有一個結構化數組的對象列表,例如:
a = np.array([('Rex', 9, 81.0), ('Fido', 3, 27.0)], dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
b = np.array([('Dog3', 9, 81.0), ('Dog4', 3, 27.0)], dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
c = np.array([('Dog5', 9, 81.0), ('Dog6', 3, 27.0)], dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
lst = [a, b, c]
現在我需要此列表本身是一個numpy數組,因為我需要在其上使用numpy.where()
,否則它將無法正常工作。
lst = np.array(lst)
所以我要做這樣的事情:
ID = np.where(lst == c)
lst[ID] = 0 or rather lst[ID] = None
但是,而不是我想要得到的,即
>>>lst
array([a, b, 0/None], dtype=...)
我要么得到這個:
>>>lst
array([a, b, [('0', 0, 0.), ('0', 0, 0.)]], dtype=...)
或根本不起作用:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
我該如何完成? 我是否必須將lst
轉換回列表拳頭?
讓我們做一個更簡單的數組,並嘗試設置一些值:
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
。
帶有object
dtype的數組的行為更像一個列表。 盡管偶爾有用,但它不應代替列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.