簡體   English   中英

Python:使列表唯一並替換重復項

[英]Python: Make a list unique and replace the duplices

我想找到具有整數列表的保留順序的唯一列表,其中重復項被零替換。 從一組多維點到另一個點的集合中找到最近的點全都在上下文中。

例子

import scipy
import numpy as np
a = np.random.rand(100,4)
b = np.random.rand(200,4)
tree=scipy.spatial.cKDTree(a)
indexesOf_neighbors= tree.query(b, 1)[1]
_, idx = np.unique(indexesOf_neighbors, return_index=True)
print(indexesOf_neighbors)
print(indexesOf_neighbors[np.sort(idx)])

所以數字的第一次出現應該是preserverd。 所有以下重復項都應替換為 np.infs ,例如:

[38 66 79 10 35 83 99 89 68 65 20 np.inf 46 np.inf 24 51 13 0 17 87 90 54 45 63 69 56 np.inf 32 62 49 964 in npfin np7.in np.inf ...]

另一種選擇是找到重復項的所有索引(但不是它們的第一次出現)

用 np.inf 做一個數組,然后替換唯一的位置怎么樣?

from scipy import spatial
import numpy as np

a = np.random.rand(100,4)
b = np.random.rand(200,4)
tree=spatial.cKDTree(a)
indexesOf_neighbors= tree.query(b, 1)[1]
u, idx = np.unique(indexesOf_neighbors, return_index=True)
print(indexesOf_neighbors)

u_indexesOf_neighbors = np.empty(indexesOf_neighbors.shape, dtype=np.float64)
u_indexesOf_neighbors.fill(np.inf)
u_indexesOf_neighbors[idx] = u
print(u_indexesOf_neighbors)

結果

[82 61  4  5 32 48 62 80 50 96 84 49 37 58 17 80 52  1 33 76 50 24 22 31
  3 77 71  3 30 43 89 67 74 18 39 72 96 16 29 29 11 59 83 12 55  3 34 87
 74 93 21 96 83 89 21 61  3 81 39 93  8 80 64 47 83 27 46 34 72 64 34 42
 72 82 74 70  0 23 56 14 69 88  2 87 26 56 89 53  3 33 94 43 43  8 86  2
 76 10 95 71 99 76 82 87 92 97 92 25 61 48 94 15 55 86 35 87 83 66 39 79
 77 57 62  1 43 74 27 34 16 83 29 34 31  2 90 51  1  2 33 17 30 96  2 82
 22 44  0 88  7 33 36 55 95 94 64 54 86 36 34 24 48  1  7 68 77 30 70 24
 28 73 43 16 20 56 55 94 63 71  5 38 86 46 23 66 48  1 72  7  8 88 56  1
 80 85 84  7 97  2 55 35]
[82. 61.  4.  5. 32. 48. 62. 80. 50. 96. 84. 49. 37. 58. 17. inf 52.  1.
 33. 76. inf 24. 22. 31.  3. 77. 71. inf 30. 43. 89. 67. 74. 18. 39. 72.
 inf 16. 29. inf 11. 59. 83. 12. 55. inf 34. 87. inf 93. 21. inf inf inf
 inf inf inf 81. inf inf  8. inf 64. 47. inf 27. 46. inf inf inf inf 42.
 inf inf inf 70.  0. 23. 56. 14. 69. 88.  2. inf 26. inf inf 53. inf inf
 94. inf inf inf 86. inf inf 10. 95. inf 99. inf inf inf 92. 97. inf 25.
 inf inf inf 15. inf inf 35. inf inf 66. inf 79. inf 57. inf inf inf inf
 inf inf inf inf inf inf inf inf 90. 51. inf inf inf inf inf inf inf inf
 inf 44. inf inf  7. inf 36. inf inf inf inf 54. inf inf inf inf inf inf
 inf 68. inf inf inf inf 28. 73. inf inf 20. inf inf inf 63. inf inf 38.
 inf inf inf inf inf inf inf inf inf inf inf inf inf 85. inf inf inf inf
 inf inf]

我選擇了 float64 dtype。 但是你可以選擇任何一個。

制作一份獨立的清單副本,以防您以后需要原件:

unique_list = indexesOf_neighbors.copy()
####keep track of unique items
unique_set = []

for idx, i in enumerate(unique_list):
    if i not in unique_set:
        unique_set.append(i) #add first non-repeating element to set
    else:
        unique_list[idx] = 0 #replace duplicates with zero

暫無
暫無

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

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