簡體   English   中英

比較不同形狀的numpy數組,逐行,刪除相同的值?

[英]Compare numpy arrays of different shapes, row wise, delete same values?

比較兩個不同形狀的數組,例如:

a:
([[1,2],
[3,4],
[5,6],
[7,8],
[9,10]])

b:
([[3,4],
[5,6]])

c = a -b

預期輸出:

c:
([[1,2],
[7,8],
[9,10]])

到目前為止,我嘗試過的結果通常是:操作數不能與形狀(21,2)(5,2)一起廣播

numpy有一個setdiff1d函數 ,問題是將數組弄亂(因此它們變成1d),結果也為1d。

使用.view一個小技巧,我們可以使numpy認為您的數組已經是1d並帶有元組元素,然后使用setdiff1d並在之后setdiff1d

嘗試這個:

import numpy as np

a = np.array([[1, 2],
              [3, 4],
              [5, 6],
              [7, 8],
              [9, 10]])

b = np.array([[3, 4],
              [5, 6]])

a_rows = a.view([('', a.dtype)] * a.shape[1])
b_rows = b.view([('', b.dtype)] * b.shape[1])

c = np.setdiff1d(a_rows, b_rows).view(a.dtype).reshape(-1, a.shape[1])

print(c)

輸出:

[[ 1  2]
 [ 7  8]
 [ 9 10]]

暫無
暫無

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

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