Numpy之布爾型索引颁虐、集合運(yùn)算和排序

到目前為止蛮原,我們了解了如何使用索引進(jìn)行切片以及選擇 ndarray 元素。當(dāng)我們知道要選擇的元素的確切索引時(shí)另绩,這些方法很有用儒陨。但是,在很多情況下笋籽,我們不知道要選擇的元素的索引蹦漠。例如,假設(shè)有一個(gè) 10,000 x 10,000 ndarray车海,其中包含從 1 到 15,000 的隨機(jī)整數(shù)津辩,我們只想選擇小于 20 的整數(shù)。這時(shí)候就要用到布爾型索引,對(duì)于布爾型索引喘沿,我們將使用邏輯參數(shù)(而不是確切的索引)選擇元素闸度。我們來看一些示例:

# We create a 5 x 5 ndarray that contains integers from 0 to 24
X = np.arange(25).reshape(5, 5)

# We print X
print()
print('Original X = \n', X)
print()

# We use Boolean indexing to select elements in X:
print('The elements in X that are greater than 10:', X[X > 10])
print('The elements in X that lees than or equal to 7:', X[X <= 7])
print('The elements in X that are between 10 and 17:', X[(X > 10) & (X < 17)])

# We use Boolean indexing to assign the elements that are between 10 and 17 the value of -1
X[(X > 10) & (X < 17)] = -1

# We print X
print()
print('X = \n', X)
print()

Original X =
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]

The elements in X that are greater than 10: [11 12 13 14 15 16 17 18 19 20 21 22 23 24]
The elements in X that lees than or equal to 7: [0 1 2 3 4 5 6 7]
The elements in X that are between 10 and 17: [11 12 13 14 15 16]

X =
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 -1 -1 -1 -1]
[-1 -1 17 18 19]
[20 21 22 23 24]]

除了布爾型索引之外,NumPy 還允許進(jìn)行集合運(yùn)算蚜印≥航可以用來比較 ndarray,例如查找兩個(gè) ndarray 中的相同元素窄赋。我們來看一些示例:

# We create a rank 1 ndarray
x = np.array([1,2,3,4,5])

# We create a rank 1 ndarray
y = np.array([6,7,2,8,4])

# We print x
print()
print('x = ', x)

# We print y
print()
print('y = ', y)

# We use set operations to compare x and y:
print()
print('The elements that are both in x and y:', np.intersect1d(x,y))
print('The elements that are in x that are not in y:', np.setdiff1d(x,y))
print('All the elements of x and y:',np.union1d(x,y))

x = [1 2 3 4 5]

y = [6 7 2 8 4]

The elements that are both in x and y: [2 4]
The elements that are in x that are not in y: [1 3 5]
All the elements of x and y: [1 2 3 4 5 6 7 8]

我們還可以在 NumPy 中對(duì) ndarray 進(jìn)行排序哟冬。我們將了解如何使用 np.sort() 函數(shù)以不同的方式對(duì)秩為 1 和 2 的 ndarray 進(jìn)行排序。和我們之前看到的其他函數(shù)一樣忆绰,sort 函數(shù)也可以當(dāng)做方法使用浩峡。但是,對(duì)于此函數(shù)來說错敢,數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式有很大變化翰灾。當(dāng) np.sort() 當(dāng)做函數(shù)使用時(shí),它不會(huì)對(duì)ndarray進(jìn)行就地排序稚茅,即不更改被排序的原始 ndarray纸淮。但是,如果將 sort 當(dāng)做方法亚享,ndarray.sort() 會(huì)就地排序 ndarray咽块,即原始數(shù)組會(huì)變成排序后的數(shù)組。我們來看一些示例:

# We create an unsorted rank 1 ndarray
x = np.random.randint(1,11,size=(10,))

# We print x
print()
print('Original x = ', x)

# We sort x and print the sorted array using sort as a function.
print()
print('Sorted x (out of place):', np.sort(x))

# When we sort out of place the original array remains intact. To see this we print x again
print()
print('x after sorting:', x)

Original x = [9 6 4 4 9 4 8 4 4 7]

Sorted x (out of place): [4 4 4 4 4 6 7 8 9 9]

x after sorting: [9 6 4 4 9 4 8 4 4 7]

注意欺税,np.sort() 會(huì)對(duì)數(shù)組進(jìn)行排序侈沪,但是如果被排序的 ndarray 具有重復(fù)的值,np.sort() 將在排好序的數(shù)組中保留這些值晚凿。但是亭罪,我們可以根據(jù)需要,同時(shí)使用 sort 函數(shù)和 unique 函數(shù)僅對(duì) x 中的唯一元素進(jìn)行排序晃虫。我們來看看如何對(duì)上述 x 中的唯一元素進(jìn)行排序:

# We sort x but only keep the unique elements in x
print(np.sort(np.unique(x)))

[4 6 7 8 9]

最后皆撩,我們來看看如何將 sort 當(dāng)做方法,原地對(duì) ndarray 進(jìn)行排序:

# We create an unsorted rank 1 ndarray
x = np.random.randint(1,11,size=(10,))

# We print x
print()
print('Original x = ', x)

# We sort x and print the sorted array using sort as a method.
x.sort()

# When we sort in place the original array is changed to the sorted array. To see this we print x again
print()
print('x after sorting:', x)

Original x = [9 9 8 1 1 4 3 7 2 8]

x after sorting: [1 1 2 3 4 7 8 8 9 9]

在對(duì)秩為 2 的 ndarray 進(jìn)行排序時(shí)哲银,我們需要在 np.sort() 函數(shù)中指定是按行排序扛吞,還是按列排序。為此荆责,我們可以使用關(guān)鍵字 axis滥比。我們來看一些示例:

# We create an unsorted rank 2 ndarray
X = np.random.randint(1,11,size=(5,5))

# We print X
print()
print('Original X = \n', X)
print()

# We sort the columns of X and print the sorted array
print()
print('X with sorted columns :\n', np.sort(X, axis = 0))

# We sort the rows of X and print the sorted array
print()
print('X with sorted rows :\n', np.sort(X, axis = 1))

Original X =
[[6 1 7 6 3]
[3 9 8 3 5]
[6 5 8 9 3]
[2 1 5 7 7]
[9 8 1 9 8]]

X with sorted columns :
[[2 1 1 3 3]
[3 1 5 6 3]
[6 5 7 7 5]
[6 8 8 9 7]
[9 9 8 9 8]]

X with sorted rows :
[[1 3 6 6 7]
[3 3 5 8 9]
[3 5 6 8 9]
[1 2 5 7 7]
[1 8 8 9 9]]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市做院,隨后出現(xiàn)的幾起案子盲泛,更是在濱河造成了極大的恐慌濒持,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寺滚,死亡現(xiàn)場離奇詭異柑营,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)村视,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門官套,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚁孔,你說我怎么就攤上這事奶赔。” “怎么了杠氢?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵站刑,是天一觀的道長。 經(jīng)常有香客問我鼻百,道長绞旅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任愕宋,我火速辦了婚禮玻靡,結(jié)果婚禮上结榄,老公的妹妹穿的比我還像新娘中贝。我一直安慰自己,他們只是感情好臼朗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布邻寿。 她就那樣靜靜地躺著,像睡著了一般视哑。 火紅的嫁衣襯著肌膚如雪绣否。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天挡毅,我揣著相機(jī)與錄音蒜撮,去河邊找鬼。 笑死跪呈,一個(gè)胖子當(dāng)著我的面吹牛段磨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耗绿,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼苹支,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了误阻?” 一聲冷哼從身側(cè)響起债蜜,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤晴埂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后寻定,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體儒洛,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年狼速,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晶丘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唐含,死狀恐怖浅浮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捷枯,我是刑警寧澤滚秩,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站淮捆,受9級(jí)特大地震影響郁油,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攀痊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一桐腌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苟径,春花似錦案站、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遭殉,卻和暖如春石挂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背险污。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工痹愚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛔糯。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓拯腮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渤闷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疾瓮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容