比較兩個numpy數(shù)組并實(shí)現(xiàn)刪除共有的元素
比較兩個numpy數(shù)組并刪除共有的元素
項(xiàng)目場景
提示:這里簡述項(xiàng)目相關(guān)背景:
兩個numpy數(shù)組要刪掉共有的元素
問題描述
例如:
a=[1,2,3,4,5,6] b=[1,2,3]
最終我想獲得x=[4,5,6]
解決方案
x=a[~np.in1d((a,b))] 這個語句即可
注意:
in1d中的是1,不是L
numpy數(shù)組元素增刪改查
介紹 NumPy 數(shù)組元素的增刪改查操作,主要有以下方法:
數(shù)組元素操作方法
函數(shù)名稱 | 描述說明 |
---|---|
resize | 返回指定形狀的新數(shù)組。 |
append | 將元素值添加到數(shù)組的末尾。 |
insert | 沿規(guī)定的軸將元素值插入到指定的元素前。 |
delete | 刪掉某個軸上的子數(shù)組,并返回刪除后的新數(shù)組。 |
argwhere | 返回?cái)?shù)組內(nèi)符合條件的元素的索引值。 |
unique | 用于刪除數(shù)組中重復(fù)的元素,并按元素值由大到小返回一個新數(shù)組。 |
1. numpy.resize()
numpy.resize() 返回指定形狀的新數(shù)組。
numpy.resize(arr, shape)
使用示例:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a) #a數(shù)組的形狀 print(a.shape) b = np.resize(a,(3,2)) #b數(shù)組 print (b) #b數(shù)組的形狀 print(b.shape) #修改b數(shù)組使其形狀大于原始數(shù)組 b = np.resize(a,(3,3)) print(b)
輸出結(jié)果為:
a數(shù)組:
[[1 2 3]
[4 5 6]]a形狀:
(2, 3)b數(shù)組:
[[1 2]
[3 4]
[5 6]]b數(shù)組的形狀:
(3, 2)修改后b數(shù)組:
[[1 2 3]
[4 5 6]
[1 2 3]]
這里需要區(qū)別 resize() 和 reshape() 的使用方法,它們看起來相似,實(shí)則不同。
resize 僅對原數(shù)組進(jìn)行修改,沒有返回值,而 reshape 不僅對原數(shù)組進(jìn)行修改,同時返回修改后的結(jié)果。
看一組示例,如下所示:
In [1]: import numpy as np In [2]: x=np.arange(12) #調(diào)用resize方法 In [3]: x_resize=x.resize(2,3,2) In [4]: x Out[4]: array([[[ 0, 1], [ 2, 3], [ 4, 5]], [[ 6, 7], [ 8, 9], [10, 11]]]) In [5]: x_resize #返回None使用print打印 In [6]: print(x_resize) None #調(diào)用reshape方法 In [7]: x_shape=x.reshape(2,3,2) #返回修改后的數(shù)組 In [8]: x_shape Out[8]: array([[[ 0, 1], [ 2, 3], [ 4, 5]], [[ 6, 7], [ 8, 9], [10, 11]]]) In [9]: x Out[9]: array([[[ 0, 1], [ 2, 3], [ 4, 5]], [[ 6, 7], [ 8, 9], [10, 11]]])
2. numpy.append()
在數(shù)組的末尾添加值,它返回一個一維數(shù)組。
numpy.append(arr, values, axis=None)
參數(shù)說明:
- arr:輸入的數(shù)組;
- values:向 arr 數(shù)組中添加的值,需要和 arr 數(shù)組的形狀保持一致;
- axis:默認(rèn)為 None,返回的是一維數(shù)組;當(dāng) axis =0 時,追加的值會被添加到行,而列數(shù)保持不變,若 axis=1 則與其恰好相反。
使用示例:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) #向數(shù)組a添加元素 print (np.append(a, [7,8,9])) #沿軸 0 添加元素 print (np.append(a, [[7,8,9]],axis = 0)) #沿軸 1 添加元素 print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))
輸出結(jié)果為:
向數(shù)組a添加元素:
[1 2 3 4 5 6 7 8 9]沿軸 0 添加元素:
[[1 2 3]
[4 5 6]
[7 8 9]]沿軸 1 添加元素:
[[1 2 3 5 5 5]
[4 5 6 7 8 9]]
3. numpy.insert()
表示沿指定的軸,在給定索引值的前一個位置插入相應(yīng)的值,如果沒有提供軸,則輸入數(shù)組被展開為一維數(shù)組。
numpy.insert(arr, obj, values, axis)
參數(shù)說明:
- arr:要輸入的數(shù)組
- obj:表示索引值,在該索引值之前插入 values 值;
- values:要插入的值;
- axis:指定的軸,如果未提供,則輸入數(shù)組會被展開為一維數(shù)組。
示例如下:
import numpy as np a = np.array([[1,2],[3,4],[5,6]]) #不提供axis的情況,會將數(shù)組展開 print (np.insert(a,3,[11,12])) #沿軸 0 垂直方向 print (np.insert(a,1,[11],axis = 0)) #沿軸 1 水平方向 print (np.insert(a,1,11,axis = 1))
輸出結(jié)果如下:
提供 axis 參數(shù):
[ 1 2 3 11 12 4 5 6]沿軸 0:
[[ 1 2]
[11 11]
[ 3 4]
[ 5 6]]沿軸 1:
[[ 1 11 2]
[ 3 11 4]
[ 5 11 6]]
4. numpy.delete()
該方法表示從輸入數(shù)組中刪除指定的子數(shù)組,并返回一個新數(shù)組。
它與 insert() 函數(shù)相似,若不提供 axis 參數(shù),則輸入數(shù)組被展開為一維數(shù)組。
numpy.delete(arr, obj, axis)
參數(shù)說明:
- arr:要輸入的數(shù)組;
- obj:整數(shù)或者整數(shù)數(shù)組,表示要被刪除數(shù)組元素或者子數(shù)組;
- axis:沿著哪條軸刪除子數(shù)組。
使用示例:
import numpy as np a = np.arange(12).reshape(3,4) #a數(shù)組 print(a) #不提供axis參數(shù)情況 print(np.delete(a,5)) #刪除第二列 print(np.delete(a,1,axis = 1)) #刪除經(jīng)切片后的數(shù)組 a = np.array([1,2,3,4,5,6,7,8,9,10]) print (np.delete(a, np.s_[::2]))
輸出結(jié)果為:
a數(shù)組:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]無 axis 參數(shù):
[ 0 1 2 3 4 6 7 8 9 10 11]刪除第二列:
[[ 0 2 3]
[ 4 6 7]
[ 8 10 11]]刪除經(jīng)過切片的數(shù)組:
[ 2 4 6 8 10]
5. numpy.argwhere()
該函數(shù)返回?cái)?shù)組中非 0 元素的索引,若是多維數(shù)組則返回行、列索引組成的索引坐標(biāo)。
示例如下所示:
import numpy as np x = np.arange(6).reshape(2,3) print(x) #返回所有大于1的元素索引 y=np.argwhere(x>1) print(y)
輸出結(jié)果:
#x數(shù)組
[[0 1 2]
[3 4 5]]
#返回行列索引坐標(biāo)
[[0 2]
[1 0]
[1 1]
[1 2]]
6. numpy.unique()
用于刪除數(shù)組中重復(fù)的元素,其語法格式如下:
numpy.unique(arr, return_index, return_inverse, return_counts)
參數(shù)說明:
- arr:輸入數(shù)組,若是多維數(shù)組則以一維數(shù)組形式展開;
- return_index:如果為 True,則返回新數(shù)組元素在原數(shù)組中的位置(索引);
- return_inverse:如果為 True,則返回原數(shù)組元素在新數(shù)組中的位置(索引);
- return_counts:如果為 True,則返回去重后的數(shù)組元素在原數(shù)組中出現(xiàn)的次數(shù)。
示例如下:
import numpy as np a = np.array([5,2,6,2,7,5,6,8,2,9]) print (a) #對a數(shù)組的去重 uq = np.unique(a) print (uq) #數(shù)組去重后的索引數(shù)組 u,indices = np.unique(a, return_index = True) #打印去重后數(shù)組的索引 print(indices) #去重?cái)?shù)組的下標(biāo): ui,indices = np.unique(a,return_inverse = True) print (ui) #打印下標(biāo) print (indices) #返回去重元素的重復(fù)數(shù)量 uc,indices = np.unique(a,return_counts = True) print (uc) 元素出現(xiàn)次數(shù): print (indices)
輸出結(jié)果為:
a數(shù)組:
[5 2 6 2 7 5 6 8 2 9]去重后的a數(shù)組
[2 5 6 7 8 9]去重?cái)?shù)組的索引數(shù)組:
[1 0 2 4 7 9]去重?cái)?shù)組的下標(biāo):
[2 5 6 7 8 9]原數(shù)組在新數(shù)組中的下標(biāo):
[1 0 2 0 3 1 2 4 0 5]返回去重元素的重復(fù)數(shù)量:
[2 5 6 7 8 9]統(tǒng)計(jì)重復(fù)元素出現(xiàn)次數(shù):
[3 2 2 1 1 1]
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
用python實(shí)現(xiàn)批量重命名文件的代碼
任務(wù)很簡單,某個目錄下面有幾千個文件,某些文件沒有后綴名,現(xiàn)在的任務(wù)就是將所有的沒有后綴名的文件加上后綴名,python有現(xiàn)成的函數(shù)可以實(shí)現(xiàn),但是在實(shí)現(xiàn)過程中遇到幾個問題,分享一下解決方法2012-05-05詳解Python3之?dāng)?shù)據(jù)指紋MD5校驗(yàn)與對比
這篇文章主要介紹了Python3之?dāng)?shù)據(jù)指紋MD5校驗(yàn)與對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06