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

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

在 2 個不同大小的 numpy 數組中交叉行

在 2 個不同大小的 numpy 數組中交叉行

FFIVE 2023-03-01 16:16:43
假設我有 2 個 numpy 數組;arr1 = np.array([       [1, 2, 3, 4],       [2, 3, 1, 4],       [2, 4, 1, 5],       ...)arr2 = np.array([       [2, 4, 1, 5],       [2, 1, 3, 5],       [1, 2, 3, 4],       ...)arr1我想獲得和的行的交集arr2。我努力了:intersect = np.intersect1d(arr1, arr2)它返回array([1, 2, 3, 4, 5])這意味著按元素相交。我想按行完成這個。它應該返回;array(      [2, 4, 1, 5],      [1, 2, 3, 5])
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

In [3]: arr1 = np.array([ 

   ...:        [1, 2, 3, 4], 

   ...:        [2, 3, 1, 4], 

   ...:        [2, 4, 1, 5], 

   ...:        ]) 

   ...:  

   ...: arr2 = np.array([ 

   ...:        [2, 4, 1, 5], 

   ...:        [2, 1, 3, 5], 

   ...:        [1, 2, 3, 4], 

   ...:        ]) 

                                                                                        

廣播平等后跟all和的適當組合any:


In [8]: (arr1[:,None,:]==arr2[None,:,:]).shape                                                       

Out[8]: (3, 3, 4)

In [9]: (arr1[:,None,:]==arr2[None,:,:]).all(axis=2)                                                 

Out[9]: 

array([[False, False,  True],

       [False, False, False],

       [ True, False, False]])

In [10]: (arr1[:,None,:]==arr2[None,:,:]).all(axis=2).any(axis=0)                                    

Out[10]: array([ True, False,  True])


In [12]: arr1[_]                                                                                     

Out[12]: 

array([[1, 2, 3, 4],

       [2, 4, 1, 5]])

帶套


In [19]: set([tuple(row) for row in arr1])                                                           

Out[19]: {(1, 2, 3, 4), (2, 3, 1, 4), (2, 4, 1, 5)}

In [20]: set([tuple(row) for row in arr2])                                                           

Out[20]: {(1, 2, 3, 4), (2, 1, 3, 5), (2, 4, 1, 5)}

In [21]: _19.intersection(_20)                                                                       

Out[21]: {(1, 2, 3, 4), (2, 4, 1, 5)}

===


如果我擴展arr2到 4 行:


...: arr2 = np.array([ 

...:        [2, 4, 1, 5], 

...:        [2, 1, 3, 5], 

...:        [1, 2, 3, 4], 

...:        [1, 1, 1, 1], 

...:        ]) 


In [34]: (arr1[:,None,:]==arr2[None,:,:]).all(axis=2).any(axis=0)                                    

Out[34]: array([ True, False,  True, False])

anyon 0 產生一個 4 元素數組,它必須用于索引arr2(不像arr1我原來那樣):


In [35]: arr2[_]                                                                                     

Out[35]: 

array([[2, 4, 1, 5],

       [1, 2, 3, 4]])

或者any沿著另一個軸:


In [36]: (arr1[:,None,:]==arr2[None,:,:]).all(axis=2).any(axis=1)                                    

Out[36]: array([ True, False,  True])

In [37]: arr1[_]                                                                                     

Out[37]: 

array([[1, 2, 3, 4],

       [2, 4, 1, 5]])

產生all(在本例中)一個 (3,4) 數組:


In [38]: (arr1[:,None,:]==arr2[None,:,:]).all(axis=2)                                                

Out[38]: 

array([[False, False,  True, False],

       [False, False, False, False],

       [ True, False, False, False]])

any可以減少行或列。


查看完整回答
反對 回復 2023-03-01
  • 1 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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