【機器學(xué)習】嘿馬機器學(xué)習(科學(xué)計算庫)第7篇:Numpy,學(xué)習目標【附代碼文檔】

本教程的知識點為:機器學(xué)習(常用科學(xué)計算庫的使用)基礎(chǔ)定位 機器學(xué)習概述 機器學(xué)習概述 1.5 機器學(xué)習算法分類 1 監(jiān)督學(xué)習 機器學(xué)習概述 1.7 Azure機器學(xué)習模型搭建實驗 Azure平臺簡介 Matplotlib 3.2 基礎(chǔ)繪圖功能 — 以折線圖為例 1 完善原始折線圖 — 給圖形添加輔助功能 Matplotlib 3.3 常見圖形繪制 1 常見圖形種類及意義 Numpy 4.2 N維數(shù)組-ndarray 1 ndarray的屬性 Numpy 4.4 ndarray運算 問題 Pandas 5.1Pandas介紹 1 Pandas介紹 Pandas 5.3 基本數(shù)據(jù)操作 1 索引操作 Pandas 5.6 文件讀取與存儲 1 CSV Pandas 5.8 高級處理-數(shù)據(jù)離散化 1 為什么要離散化 Pandas 5.12 案例 1 需求

完整筆記資料代碼:https://gitee.com/yinuo112/AI/tree/master/機器學(xué)習/嘿馬機器學(xué)習(科學(xué)計算庫)/note.md

感興趣的小伙伴可以自取哦~


全套教程部分目錄:


部分文件圖片:

Numpy

學(xué)習目標

  • 了解Numpy運算速度上的優(yōu)勢
  • 知道數(shù)組的屬性稚新,形狀、類型
  • 應(yīng)用Numpy實現(xiàn)數(shù)組的基本操作
  • 應(yīng)用隨機數(shù)組的創(chuàng)建實現(xiàn)正態(tài)分布應(yīng)用
  • 應(yīng)用Numpy實現(xiàn)數(shù)組的邏輯運算
  • 應(yīng)用Numpy實現(xiàn)數(shù)組的統(tǒng)計運算
  • 應(yīng)用Numpy實現(xiàn)數(shù)組之間的運算

4.4 ndarray運算

學(xué)習目標

  • 目標

    • 應(yīng)用數(shù)組的通用判斷函數(shù)
    • 應(yīng)用np.where實現(xiàn)數(shù)組的三元運算

問題

如果想要操作符合某一條件的數(shù)據(jù)舶治,應(yīng)該怎么做扮惦?

1 邏輯運算

  
  
# 生成10名同學(xué)源梭,5門功課的數(shù)據(jù)
  
  
>>> score = np.random.randint(40, 100, (10, 5))

  
  
# 取出最后4名同學(xué)的成績粪滤,用于邏輯判斷
  
  
>>> test_score = score[6:, 0:5]

  
  
# 邏輯判斷, 如果成績大于60就標記為True 否則為False
  
  
>>> test_score > 60
array([[ True,  True,  True, False,  True],
       [ True,  True,  True, False,  True],
       [ True,  True, False, False,  True],
       [False,  True,  True,  True,  True]])

  
  
# BOOL賦值, 將滿足條件的設(shè)置為指定的值-布爾索引
  
  
>>> test_score[test_score > 60] = 1
>>> test_score
array([[ 1,  1,  1, 52,  1],
       [ 1,  1,  1, 59,  1],
       [ 1,  1, 44, 44,  1],
       [59,  1,  1,  1,  1]])

2 通用判斷函數(shù)

  • np.all()
  
  
# 判斷前兩名同學(xué)的成績[0:2, :]是否全及格
  
  
>>> np.all(score[0:2, :] > 60)
False
  • np.any()
  
  
# 判斷前兩名同學(xué)的成績[0:2, :]是否有大于90分的
  
  
>>> np.any(score[0:2, :] > 80)
True

3 np.where(三元運算符)

通過使用np.where能夠進行更加復(fù)雜的運算

  • np.where()
  
  
# 判斷前四名學(xué)生,前四門中宁舰,成績中大于60的置為1,否則為0
  
  
temp = score[:4, :4]
np.where(temp > 60, 1, 0)
  • 復(fù)合邏輯需要結(jié)合np.logical_and和np.logical_or使用
  
  
# 判斷前四名學(xué)生,前四門中蓖议,成績中大于60且小于90的換為1虏杰,否則為0
  
  
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)

  
  
# 判斷前四名學(xué)生,前四門中,成績中大于90或小于60的換為1勒虾,否則為0
  
  
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

4 統(tǒng)計運算

如果想要知道學(xué)生成績最大的分數(shù)纺阔,或者做小分數(shù)應(yīng)該怎么做?

4.1 統(tǒng)計指標

在數(shù)據(jù)挖掘/機器學(xué)習領(lǐng)域修然,統(tǒng)計指標的值也是我們分析問題的一種方式笛钝。常用的指標如下:

  • min(a, axis)

    • Return the minimum of an array or minimum along an axis.
  • max(a, axis])

    • Return the maximum of an array or maximum along an axis.
  • median(a, axis)

    • Compute the median along the specified axis.
  • mean(a, axis, dtype)

    • Compute the arithmetic mean along the specified axis.
  • std(a, axis, dtype)

    • Compute the standard deviation along the specified axis.
  • var(a, axis, dtype)

    • Compute the variance along the specified axis.

4.2 案例:學(xué)生成績統(tǒng)計運算

進行統(tǒng)計的時候质况,axis 軸的取值并不一定,Numpy中不同的API軸的值都不一樣玻靡,在這里结榄,axis 0代表列, axis 1代表行去進行統(tǒng)計

  
  
# 接下來對于前四名學(xué)生,進行一些統(tǒng)計運算
  
  
  
  
# 指定列 去統(tǒng)計
  
  
temp = score[:4, 0:5]
print("前四名學(xué)生,各科成績的最大分:{}".format(np.max(temp, axis=0)))
print("前四名學(xué)生,各科成績的最小分:{}".format(np.min(temp, axis=0)))
print("前四名學(xué)生,各科成績波動情況:{}".format(np.std(temp, axis=0)))
print("前四名學(xué)生,各科成績的平均分:{}".format(np.mean(temp, axis=0)))

結(jié)果:

前四名學(xué)生,各科成績的最大分:[96 97 72 98 89]
前四名學(xué)生,各科成績的最小分:[55 57 45 76 77]
前四名學(xué)生,各科成績波動情況:[16.25576821 14.92271758 10.40432602  8.0311892   4.32290412]
前四名學(xué)生,各科成績的平均分:[78.5  75.75 62.5  85.   82.25]

如果需要統(tǒng)計出某科最高分對應(yīng)的是哪個同學(xué)?

  • np.argmax(temp, axis=)
  • np.argmin(temp, axis=)
print("前四名學(xué)生囤捻,各科成績最高分對應(yīng)的學(xué)生下標:{}".format(np.argmax(temp, axis=0)))

結(jié)果:

前四名學(xué)生臼朗,各科成績最高分對應(yīng)的學(xué)生下標:[0 2 0 0 1]

5 小結(jié)

  • 邏輯運算【知道】

    • 直接進行大于,小于的判斷
    • 合適之后,可以直接進行賦值
  • 通用判斷函數(shù)【知道】

    • np.all()
    • np.any()
  • 統(tǒng)計運算【掌握】

    • np.max()
    • np.min()
    • np.median()
    • np.mean()
    • np.std()
    • np.var()
    • np.argmax(axis=) — 最大元素對應(yīng)的下標
    • np.argmin(axis=) — 最小元素對應(yīng)的下標

4.5 數(shù)組間運算

學(xué)習目標

  • 目標

    • 知道數(shù)組與數(shù)之間的運算
    • 知道數(shù)組與數(shù)組之間的運算
    • 說明數(shù)組間運算的廣播機制

1 數(shù)組與數(shù)的運算

arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr + 1
arr / 2

  
  
# 可以對比python列表的運算,看出區(qū)別
  
  
a = [1, 2, 3, 4, 5]
a * 3

2 數(shù)組與數(shù)組的運算

arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])

上面這個能進行運算嗎蝎土,結(jié)果是不行的视哑!

2.1 廣播機制

數(shù)組在進行矢量化運算時,要求數(shù)組的形狀是相等的誊涯。當形狀不相等的數(shù)組執(zhí)行算術(shù)運算的時候挡毅,就會出現(xiàn)廣播機制,該機制會對數(shù)組進行擴展暴构,使數(shù)組的shape屬性值一樣跪呈,這樣,就可以進行矢量化運算了取逾。下面通過一個例子進行說明:

arr1 = np.array([[0],[1],[2],[3]])
arr1.shape
  
  
# (4, 1)
  
  

arr2 = np.array([1,2,3])
arr2.shape
  
  
# (3,)
  
  

arr1+arr2
  
  
# 結(jié)果是:
  
  
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])

上述代碼中耗绿,數(shù)組arr1是4行1列,arr2是1行3列菌赖。這兩個數(shù)組要進行相加缭乘,按照廣播機制會對數(shù)組arr1和arr2都進行擴展,使得數(shù)組arr1和arr2都變成4行3列琉用。

下面通過一張圖來描述廣播機制擴展數(shù)組的過程:

image-20190620005224076

這句話乃是理解廣播的核心堕绩。廣播主要發(fā)生在兩種情況,一種是兩個數(shù)組的維數(shù)不相等邑时,但是它們的后緣維度的軸長相符奴紧,另外一種是有一方的長度為1。

廣播機制實現(xiàn)了時兩個或兩個以上數(shù)組的運算晶丘,即使這些數(shù)組的shape不是完全相同的黍氮,只需要滿足如下任意一個條件即可。

  • 如果兩個數(shù)組的后緣維度(trailing dimension浅浮,即從末尾開始算起的維度)的軸長度相符沫浆,
  • 其中的一方的長度為1

廣播會在缺失和(或)長度為1的維度上進行滚秩。

廣播機制需要擴展維度小的數(shù)組专执,使得它與維度最大的數(shù)組的shape值相同,以便使用元素級函數(shù)或者運算符進行運算郁油。

如果是下面這樣本股,則不匹配:

A  (1d array): 10
B  (1d array): 12
A  (2d array):      2 x 1
B  (3d array):  8 x 4 x 3

思考:下面兩個ndarray是否能夠進行運算攀痊?

arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])

3 小結(jié)

  • 數(shù)組運算,滿足廣播機制,就OK【知道】

    • 1.維度相等
    • 2.shape(其中對應(yīng)的地方為1,也是可以的)

Numpy

學(xué)習目標

  • 了解Numpy運算速度上的優(yōu)勢
  • 知道數(shù)組的屬性,形狀拄显、類型
  • 應(yīng)用Numpy實現(xiàn)數(shù)組的基本操作
  • 應(yīng)用隨機數(shù)組的創(chuàng)建實現(xiàn)正態(tài)分布應(yīng)用
  • 應(yīng)用Numpy實現(xiàn)數(shù)組的邏輯運算
  • 應(yīng)用Numpy實現(xiàn)數(shù)組的統(tǒng)計運算
  • 應(yīng)用Numpy實現(xiàn)數(shù)組之間的運算

4.6 數(shù)學(xué):矩陣

學(xué)習目標

  • 目標

    • 知道什么是矩陣和向量
    • 知道矩陣的加法,乘法
    • 知道矩陣的逆和轉(zhuǎn)置
    • 應(yīng)用np.matmul苟径、np.dot實現(xiàn)矩陣運算

1 矩陣和向量

1.1 矩陣

矩陣,英文matrix躬审,和array的區(qū)別矩陣必須是2維的棘街,但是array可以是多維的。

如圖:這個是 3×2 矩陣盒件,即 3 行 2 列蹬碧,如 m 為行舱禽,n 為列炒刁,那么 m×n 即 3×2<span class="katex-display"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mrow><mo fence="true">[</mo><mtable><mtr><mtd><mrow><mn>1</mn></mrow></mtd><mtd><mrow><mn>2</mn></mrow></mtd></mtr><mtr><mtd><mrow><mn>3</mn></mrow></mtd><mtd><mrow><mn>4</mn></mrow></mtd></mtr><mtr><mtd><mrow><mn>5</mn></mrow></mtd><mtd><mrow><mn>6</mn></mrow></mtd></mtr></mtable><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">\left[ \begin{matrix} 1 & 2 \ 3 & 4 \ 5 & 6 \end{matrix} \right]</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:2.05002em;"></span><span class="strut bottom" style="height:3.60004em;vertical-align:-1.55002em;"></span><span class="base displaystyle textstyle uncramped"><span class="minner displaystyle textstyle uncramped"><span class="mopen style-wrap reset-textstyle textstyle uncramped"><span class="delimsizing mult"><span class="vlist"><span style="top:0.9049999999999999em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="delimsizinginner delim-size4"><span>?</span></span></span><span style="top:-0.89502em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="delimsizinginner delim-size4"><span>?</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span></span></span></span></span><span class="mord"><s

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市誊稚,隨后出現(xiàn)的幾起案子翔始,更是在濱河造成了極大的恐慌,老刑警劉巖里伯,帶你破解...
    沈念sama閱讀 212,185評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件城瞎,死亡現(xiàn)場離奇詭異,居然都是意外死亡疾瓮,警方通過查閱死者的電腦和手機脖镀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狼电,“玉大人蜒灰,你說我怎么就攤上這事〖绲” “怎么了强窖?”我有些...
    開封第一講書人閱讀 157,684評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長削祈。 經(jīng)常有香客問我翅溺,道長,這世上最難降的妖魔是什么髓抑? 我笑而不...
    開封第一講書人閱讀 56,564評論 1 284
  • 正文 為了忘掉前任咙崎,我火速辦了婚禮,結(jié)果婚禮上吨拍,老公的妹妹穿的比我還像新娘褪猛。我一直安慰自己,他們只是感情好密末,可當我...
    茶點故事閱讀 65,681評論 6 386
  • 文/花漫 我一把揭開白布握爷。 她就那樣靜靜地躺著跛璧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪新啼。 梳的紋絲不亂的頭發(fā)上追城,一...
    開封第一講書人閱讀 49,874評論 1 290
  • 那天,我揣著相機與錄音燥撞,去河邊找鬼座柱。 笑死,一個胖子當著我的面吹牛物舒,可吹牛的內(nèi)容都是我干的色洞。 我是一名探鬼主播,決...
    沈念sama閱讀 39,025評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼冠胯,長吁一口氣:“原來是場噩夢啊……” “哼火诸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荠察,我...
    開封第一講書人閱讀 37,761評論 0 268
  • 序言:老撾萬榮一對情侶失蹤置蜀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后悉盆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盯荤,經(jīng)...
    沈念sama閱讀 44,217評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,545評論 2 327
  • 正文 我和宋清朗相戀三年焕盟,在試婚紗的時候發(fā)現(xiàn)自己被綠了秋秤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,694評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡脚翘,死狀恐怖灼卢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堰怨,我是刑警寧澤芥玉,帶...
    沈念sama閱讀 34,351評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站备图,受9級特大地震影響灿巧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揽涮,卻給世界環(huán)境...
    茶點故事閱讀 39,988評論 3 315
  • 文/蒙蒙 一抠藕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒋困,春花似錦盾似、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溉跃。三九已至,卻和暖如春告抄,著一層夾襖步出監(jiān)牢的瞬間撰茎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評論 1 266
  • 我被黑心中介騙來泰國打工打洼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留龄糊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,427評論 2 360
  • 正文 我出身青樓募疮,卻偏偏與公主長得像炫惩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阿浓,可洞房花燭夜當晚...
    茶點故事閱讀 43,580評論 2 349

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