亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果條目本身是結構化數組,如何將 numpy 數組中的條目設置為 0 或 None?

如果條目本身是結構化數組,如何將 numpy 數組中的條目設置為 0 或 None?

慕村9548890 2022-03-05 15:13:26
我有一個結構化數組的對象列表,例如: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但不是我想得到的,即>>>lstarray([a, b, 0/None], dtype=...)我要么得到這個:>>>lstarray([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回列表拳頭嗎?
查看完整描述

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行為更像一個列表。雖然偶爾有用,但它不應該用作列表的替代品。


查看完整回答
反對 回復 2022-03-05
  • 1 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號