簡體   English   中英

如何將數組中的值列表重新映射到 NumPy 中的另一個值列表?

[英]How to remap list of values from an array to another list of values in NumPy?

假設我們有初始數組:

test_array = np.array([1, 4, 2, 5, 7, 4, 2, 5, 6, 7, 7, 2, 5])

通過使用另外兩個 arrays 來重新映射此數組中元素的最佳方法是什么,一個代表我們要替換的元素,第二個代表替換它們的新值:

map_from = np.array([2, 4, 5])
map_to = np.array([9, 0, 3])

所以結果應該是:

remaped_array = [1, 0, 9, 3, 7, 0, 9, 3, 6, 7, 7, 9, 3]

可能有更簡潔的方法來執行此操作,但這應該通過使用掩碼來工作。

mask = test_array[:,None] == map_from
val = map_to[mask.argmax(1)]
np.where(mask.any(1), val, test_array)

output:

array([1, 0, 9, 3, 7, 0, 9, 3, 6, 7, 7, 9, 3])

如果您的原始數組僅包含正整數並且它們的最大值不是很大,則使用映射數組最簡單:

>>> a = np.array([1, 4, 2, 5, 7, 4, 2, 5, 6, 7, 7, 2, 5])
>>> mapping = np.arange(a.max() + 1)
>>> map_from = np.array([2, 4, 5])
>>> map_to = np.array([9, 0, 3])
>>> mapping[map_from] = map_to
>>> mapping[a]
array([1, 0, 9, 3, 7, 0, 9, 3, 6, 7, 7, 9, 3])

這是另一種通用方法:

>>> vals, inv = np.unique(a, return_inverse=True)
>>> vals[np.searchsorted(vals, map_from)] = map_to
>>> vals[inv]
array([1, 0, 9, 3, 7, 0, 9, 3, 6, 7, 7, 9, 3])

暫無
暫無

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

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