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

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

從兩個 numpy 數組中刪除匹配的元素

從兩個 numpy 數組中刪除匹配的元素

慕神8447489 2022-06-22 17:55:33
考慮兩個排序numpy數組:import numpy as npa = np.array([1,2,4,4,6,8,10,10,21])b = np.array([3,3,4,6,10,18,22])我如何: 1. 查找出現在兩個列表中的元素,以及 2. 從每個列表中僅刪除該出現的一個實例。那就是輸出應該是:a = [1,2,4,8,10,21]b = [3,3,18,22]所以即使有重復,也只會刪除一個實例。但是,如果列表是c = np.array([1,2,4,4,6,8,10,10,10,21])d = np.array([3,3,4,6,10,10,18,22])我希望獲得新的輸出:c = [1,2,4,8,10,21]d = [3,3,18,22]這與上面相同。不同之處在于列表中 10 的數量。列表中的兩個 10 中的d每一個都會從c相同的結果中刪除一個 10。這篇文章與我的問題最接近,但它從兩個列表中刪除了所有重復實例。
查看完整描述

4 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

您可以使用collections.Counter:


from collections import Counter


import numpy as np


a = np.array([1, 2, 4, 4, 6, 8, 10, 10, 21])

b = np.array([3, 3, 4, 6, 10, 18, 22])


ca = Counter(a)

cb = Counter(b)


result_a = sorted((ca - cb).elements())

result_b = sorted((cb - ca).elements())


print(result_a)

print(result_b)

輸出


[1, 2, 4, 8, 10, 21]

[3, 3, 18, 22]

它返回相同的結果(如預期的那樣):


a = np.array([1, 2, 4, 4, 6, 8, 10, 10, 10, 21])

b = np.array([3, 3, 4, 6, 10, 10, 18, 22])


查看完整回答
反對 回復 2022-06-22
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

根據這個問題,我不是 100% 確定您要做什么,但我已經能夠使用所描述的方法復制輸出。


import numpy as np


# List of b that are not in a

a = np.array([1,2,4,4,6,8,10,10,21])

b = np.array([3,3,4,6,10,18,22])

newb = [x for x in b if x not in a]

print(newb)


# REMOVE ONE DUPLICATED ELEMENT FROM LIST

import collections

counter=collections.Counter(a)

print(counter)

newa = list(a)

for k,v in counter.items():

    if v > 1:

        newa.remove(k)

print(newa)


查看完整回答
反對 回復 2022-06-22
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

您可以使用以下方法找到相交項的首次出現索引,np.searchsorted然后使用np.delete()函數將其刪除:


In [58]: intersect = a[np.in1d(a, b)]

In [59]: mask1 = np.searchsorted(a, intersect)


In [60]: mask2 = np.searchsorted(b, intersect)


In [61]: np.delete(a, mask1)

Out[61]: array([ 1,  2,  4,  8, 10, 21])


In [62]: np.delete(b, mask2)

Out[62]: array([ 3,  3, 18, 22])


查看完整回答
反對 回復 2022-06-22
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

如果您不介意冗長:


import numpy as np


a = np.array([1,2,4,4,6,8,10,10,21])

b = np.array([3,3,4,6,10,18,22])


common_values = set(a) & set(b)


a = a.tolist()

b = b.tolist()


for value in common_values:

    a.remove(value)

    b.remove(value)


a = np.array(a)

b = np.array(b)


查看完整回答
反對 回復 2022-06-22
  • 4 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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