python numpy中setdiff1d的用法說明
一、函數(shù)解釋
setdiff1d(ar1, ar2, assume_unique=False)
1.功能:找到2個數(shù)組中集合元素的差異。
2.返回值:在ar1中但不在ar2中的已排序的唯一值。
3.參數(shù):
ar1:array_like 輸入數(shù)組。
ar2:array_like 輸入比較數(shù)組。
assume_unique:bool。如果為True,則假定輸入數(shù)組是唯一的,即可以加快計算速度。 默認(rèn)值為False。
二、具體示例
1.assume_unique = False的情況:
a = np.array([1,2,3]) b = np.array([4,5,6]) c = np.setdiff1d(a, b) print(c)#[1 2 3] a = np.array([1,2,3]) b = np.array([1,2,3]) c = np.setdiff1d(a, b) print(c)#[] a = np.array([1,2,3]) b = np.array([2,3,4]) c = np.setdiff1d(a, b) print(c)#[1] a = np.array([1,2,3,4]) b = np.array([3,4,5,6]) c = np.setdiff1d(a, b) print(c)#[1 2] a = np.array([1,2,3,2,4,1]) b = np.array([3,4,5,6]) c = np.setdiff1d(a, b) print(c)#[1 2] a = np.array([8,2,3,2,4,1]) b = np.array([7,4,5,6,3]) c = np.setdiff1d(a, b) print(c)#[1 2 8]
可以從最后看出返回的值從小到大排序,并且唯一。(8在a的第1位,2在a中重復(fù)了2次)
2.assume_unique = True的情況:
a = np.array([3,2,1]) b = np.array([4,5,6]) c = np.setdiff1d(a, b,True) print(c)#[3 2 1] a = np.array([8,2,3,2,4,1]) b = np.array([7,4,5,6,3]) c = np.setdiff1d(a, b,True) print(c)#[8 2 2 1] a = np.array([8,2,3,4,2,4,1]) b = np.array([7,9,5,6,3]) c = np.setdiff1d(a, b,True) print(c)#[8 2 4 2 4 1]
可以看出把在a中的但是不在b中的元素按a中的順序排序,并且不合并重復(fù)的元素,即假定輸入數(shù)組也是唯一的,因此相比于False確實(shí)提升了運(yùn)算速度。
三、整體代碼
import numpy as np def main(): a = np.array([1,2,3]) b = np.array([4,5,6]) c = np.setdiff1d(a, b) print(c)#[1 2 3] a = np.array([1,2,3]) b = np.array([1,2,3]) c = np.setdiff1d(a, b) print(c)#[] a = np.array([1,2,3]) b = np.array([2,3,4]) c = np.setdiff1d(a, b) print(c)#[1] a = np.array([1,2,3,4]) b = np.array([3,4,5,6]) c = np.setdiff1d(a, b) print(c)#[1 2] a = np.array([1,2,3,2,4,1]) b = np.array([3,4,5,6]) c = np.setdiff1d(a, b) print(c)#[1 2] a = np.array([8,2,3,2,4,1]) b = np.array([7,4,5,6,3]) c = np.setdiff1d(a, b) print(c)#[1 2 8] a = np.array([3,2,1]) b = np.array([4,5,6]) c = np.setdiff1d(a, b,True) print(c)#[3 2 1] a = np.array([8,2,3,2,4,1]) b = np.array([7,4,5,6,3]) c = np.setdiff1d(a, b,True) print(c)#[8 2 2 1] a = np.array([8,2,3,4,2,4,1]) b = np.array([7,9,5,6,3]) c = np.setdiff1d(a, b,True) print(c)#[8 2 4 2 4 1] if __name__ == '__main__': main()
補(bǔ)充:Python編程之numpy庫函數(shù)in1d的使用
最近利用Python作數(shù)值分析時使用到numpy庫下的in1d函數(shù)。in1d函數(shù)與excel中vlookup函數(shù)和MATLAB中ismember函數(shù)有相似之處。其作用在于在序列B中尋找與序列A相同的值,并返回一邏輯值(True,False)或邏輯值構(gòu)成的向量。
具體例子見下文
設(shè)mask為邏輯值向量,矩陣x的第一列為待查找向量,d為被查詢向量(或值),即查找x中與d中指定元素相同的值,并返回邏輯值向量mask。mask是由一系列True和False值構(gòu)成,True代表找到相同的值,而False代表沒找到相同的值。演示如下:
mask= np.in1d(x.values[:,1],d[1],invert=False) ##x為DataFrame型數(shù)據(jù),x.values[:,1]表示取第二列值 x_temp=x[mask]
示取第二列值
x_temp=x[mask]
該例旨在查找 x 的第二列值中與d向量中第二個元素相同的部分 ,并返回mask邏輯向量;然后x_temp返回x中mask邏輯值為True的行。
mask向量的類型為bool,查看具體值下圖所示:
值得注意的地方在于in1d函數(shù)中invert參數(shù)的設(shè)置。當(dāng)invert=True時,mask中的元素值為True的部分對x.values[:,1]中與當(dāng)前查找的元素d[i]不同的部分(i為當(dāng)前查找位置),相同的部分則為false;當(dāng)invert=False時,mask中的元素值為True的部分對x.values[:,1]中與當(dāng)前查找的元素d[i]相同的部分(i為當(dāng)前查找位置)。
演示見下圖:
當(dāng)mask= np.in1d(x.values[:,1],d[2],invert=True)
當(dāng)mask= np.in1d(x.values[:,1],d[2],invert=False)時
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
python實(shí)現(xiàn)多人聊天服務(wù)器以及客戶端
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)多人聊天服務(wù)器以及客戶端,帶圖形化界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07python實(shí)現(xiàn)校園網(wǎng)自動登錄的示例講解
下面小編就為大家分享一篇python實(shí)現(xiàn)校園網(wǎng)自動登錄的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python實(shí)現(xiàn)仿真雙徑效應(yīng)的方法
雙徑模型是一種很好的近似,能夠準(zhǔn)確地反映信號的傳播特性。這篇文章主要介紹了Python實(shí)現(xiàn)仿真雙徑效應(yīng)的方法,感興趣的小伙伴們可以參考一下2021-05-05關(guān)于pyqt5控件自適應(yīng)窗口超詳細(xì)知識點(diǎn)匯總
這篇文章主要介紹了關(guān)于pyqt5控件自適應(yīng)窗口超詳細(xì)知識點(diǎn)匯總,有了布局,再在布局中放置各種控件,我們就能讓控件實(shí)現(xiàn)自適應(yīng)的效果,需要的朋友可以參考下2023-03-03Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖
這篇文章主要介紹了Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖,plt.subplots調(diào)用后將會產(chǎn)生一個圖表和默認(rèn)網(wǎng)格,與此同時提供一個合理的控制策略布局子繪圖,更多相關(guān)需要的朋友可以參考下面文章內(nèi)容2022-07-07