簡體   English   中英

numpy:替換recarray中的值

[英]numpy: Replacing values in a recarray

我對 numpy 很陌生,我正在嘗試替換recarray 中的一個值。 所以我有這個數組:

import numpy as np
d = [('1', ''),('4', '5'),('7', '8')]
a = np.array(d, dtype=[('first', 'a5'), ('second', 'a5')])

我想做這樣的事情:

ind = a=='' #Replace all blanks
a[ind] = '12345'

但這不能正常工作。 我能夠做到這一點:

col = a['second']
ind = col=='' #Replace all blanks
col[ind] = '54321'
a['second'] = col

哪個有效,但我寧願有辦法在整個重新排列中做到這一點。 有人有更好的解決方案嗎?

據我所知,numpy 的“逐個元素”操作(您可以在沒有循環的情況下一次對數組的所有元素執行一些 function)不適用於重新數組。 您只能對各個列執行此操作。

如果你想使用recarrays,我認為最簡單的解決方案是循環不同的列,雖然你想要另一個解決方案,但你可以像這樣自動完成:

for fieldname in a.dtype.names:
    ind = a[fieldname] == ''
    a[fieldname][ind] = '54321'

但也許你應該考慮你是否真的需要recarrays,並且不能只使用普通的ndarray。 當然,如果您只有一種數據類型(如示例中所示),那么唯一的優勢就是列名。

一種可能的解決方案:

a[np.where(a['second']=='')[0][0]]['second']='12345'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM