簡體   English   中英

重新編號一維數組的元素

[英]RENUMBER ELEMENTS OF 1D ARRAY

我是新來的,我想和你分享一個我面臨的問題

基本上我必須根據另一個數組的元素重新編號一個數組。

更多細節:

我有一個 int 數組 a

a=array([    1,     2,     3, ..., 21041, 21042, 21043])

len(a)=21043

然后,將掩碼應用於“a”,得到 b

b=a[mask]
b=array[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 28 32 33 34 47 54 55 62....21043]

len(b)=15717

在這一點上,我已經輕松地對這個數組進行了排序:

b_renumber=array[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23....15717]

因此,“b”中的數字 28 在“b_renumber”中變為 21,32 變為 22,依此類推。

現在問題是第三個數組 c

因為 c 的長度大於 b。

len(c)=46153

並且由下式給出:

c=array[ 3 4 142 633 12 19 564 497 513 54 308 177 254 532 155 3 273 28 ...21037]

所以基本上 c 是一個長度為 46153(未排序)的數組,其中 go 從 1 到 21043 的元素,以及數組 b 和像 b 一樣的一些數字不存在(例如 21 22 23... b 中不存在的相同元素也在 c 中不存在。

我想要做的是重新編號 c 的元素,這樣 c 的元素值和 b_renumber 之間存在鏈接。 b中的示例我們有數字28,在b_renumber中變成21(從b到b_renumber,28 -> 21),我想做的是:每次我在c中遇到值28時,這必須變成21,其他數字相同。

最后一點:數組仍然很小,但我必須使用更大維度的數組,所以我必須以有效的方式執行此操作,可能存在 function 或一些 package 允許我這樣做。 請我願意接受每一個建議

很抱歉帖子的長度,我希望有人可以幫助我。

先感謝您。

馬泰奧

假設 b_renum 只包含 b 中每個元素的索引+1:

輸入:

b = [0,1,2,100]
c = [20,50,60,100]

請注意dict.get(key, default)如果匹配則返回鍵的值,否則返回默認值。

b_renum = list(range(1,len(b)+1))
renum_dict = dict(zip(b, b_renum))
# slightly slower
# renum_dict = {elem:ind for ind,elem in enumerate(b)}

c_renum = [renum_dict.get(key,key) for key in c]

>>> print(b_renum)
[1, 2, 3, 4]

>>> print(c_renum)
[20, 50, 60, 3]

請注意 100 如何在c_renum中映射到 3。 我認為對您有用的是 1) 使用zip()因為您知道bb_renum的長度相同,以及 2) 使用字典來查找值 + dict.get()技巧。 列表理解也很快。

暫無
暫無

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

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