Numpy簡(jiǎn)易入門筆記

來自 AI基礎(chǔ):Numpy簡(jiǎn)易入門
手動(dòng)運(yùn)行了一遍實(shí)例代碼稽煤,筆記待查于此處。

Numpy 簡(jiǎn)易入門

Numpy是 Numeric Python 的簡(jiǎn)稱,可用于高速矢量化报咳、矩陣數(shù)據(jù)運(yùn)算椎咧。

1.1 Numpy 數(shù)組對(duì)象

Numpy 是用 Python 語言寫的科學(xué)計(jì)算庫玖详,包括:

  • N維數(shù)組對(duì)象Array(框架底層都用 np 來計(jì)算,比如計(jì)算并返回勤讽,哪一類label 的概率最高蟋座,用的是np的argmax的函數(shù))
  • 成熟的廣播函數(shù)庫
  • 整合 C/C++和 Fortran 的工具包(此處體現(xiàn)了 -> Python 的膠水語言特性)
  • 線性代數(shù)、傅里葉變換和隨機(jī)數(shù)生成函數(shù)等脚牍,與稀疏矩陣運(yùn)算包 scipy 配合更方便(這個(gè)package向臀,可以做統(tǒng)計(jì)檢驗(yàn),比如 t-檢驗(yàn)诸狭,做 A/B Test)
import numpy as np

data = np.arange(15).reshape(3, 5)
print(data)
print(data.ndim)
print(data.shape)
print(data.size)
print(data.dtype)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
<class 'numpy.ndarray'>
2
(3, 5)
15
int64

1.2 創(chuàng)建 Numpy 數(shù)組對(duì)象

import numpy as np

data1 = np.array([[3,2,1]])
print(data1)
data2 = np.array([[3,2,1],[6,5,4]])
print(data2)

print(np.zeros((3,5)))
print(np.ones((3,5)))
print(np.empty((5,2)))
print(np.arange(1,20,5))
print(np.ones((2,3),dtype='float64'))
[[3 2 1]]
[[3 2 1]
 [6 5 4]]
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
[[-3.10503618e+231 -3.10503618e+231]
 [ 2.47032823e-323  0.00000000e+000]
 [ 0.00000000e+000  0.00000000e+000]
 [ 0.00000000e+000  0.00000000e+000]
 [ 0.00000000e+000  6.95335581e-309]]
[ 1  6 11 16]
[[1. 1. 1.]
 [1. 1. 1.]]

1.3 ndarry 對(duì)象的數(shù)據(jù)類型

1.3.1 查看數(shù)據(jù)類型

data1 = np.array([[3,2,1],[6,5,4]])
print(data1.dtype.name)
data2 = np.ones((2,3),dtype='float64')
print(data2.dtype.name)
int64
float64

1.3.2 轉(zhuǎn)換數(shù)據(jù)類型

data1 = np.array([[3,2,1],[6,5,4]])
print(data1.dtype.name)
data2 = np.ones((2,3),dtype='float64')
print(data2.dtype.name)
int64
float64
data2 = np.ones((2,3),dtype='float64')
print(data2.dtype.name)
int_data1 = data2.astype(np.int64)
print(int_data1.dtype.name)
float64
int64
str_data = np.array(['4','5','6'])
print(str_data.dtype.name)
int_data = str_data.astype(np.int64)
print(int_data.dtype.name)
str32
int64

1.4 數(shù)組運(yùn)算

1.4.1 向量化

data1 = np.array([[4,5,6],[7,8,9]])

data2 = np.array([[5,5,6],[7,10,9]])

print(data1+data2)
print(data1-data2)
print(data1*data2)
print(data1/data2)

[[ 9 10 12]
 [14 18 18]]
[[-1  0  0]
 [ 0 -2  0]]
[[20 25 36]
 [49 80 81]]
[[0.8 1.  1. ]
 [1.  0.8 1. ]]

1.4.2 數(shù)組廣播

如果 array_a.shape != array_b.shape券膀,廣播機(jī)制就自動(dòng)觸發(fā)了。

data1 = np.array([[0],[1],[2],[3]])
data2 = np.array([[1,2,3]])
print(data1)
print("=========")
print(data2)
print("=========")
print(data1+data2)

[[0]

 [1]
 
 [2]
 
 [3]]
 
=========

[[1 2 3]]

=========

[[1 2 3]

 [2 3 4]
 
 [3 4 5]
 
 [4 5 6]]

圖解:

圖解1
圖解2

1.4.3 數(shù)組與標(biāo)量間的運(yùn)算

如果 array_a.shape != array_b.shape驯遇,廣播機(jī)制就自動(dòng)觸發(fā)了芹彬。

data1 = np.array([[1,2,3],[4,5,6]])
data2 = 11

print(data1)
print(data1+data2)
print(data1*data2)
print(data1-data2)
print(data1/data2)

[[1 2 3]
 [4 5 6]]
[[12 13 14]
 [15 16 17]]
[[11 22 33]
 [44 55 66]]
[[-10  -9  -8]
 [ -7  -6  -5]]
[[0.09090909 0.18181818 0.27272727]
 [0.36363636 0.45454545 0.54545455]]

1.5 ndarray 索引和切片

1.5.1 整數(shù)索引和切片

image
image
arr = np.arange(8)
print(arr)
print(arr[5])
print(arr[3:5])
print(arr[1:6:2])
[0 1 2 3 4 5 6 7]
5
[3 4]
[1 3 5]
arr2d = np.array([[1,2,3],[4,5,6]])
print(arr2d)
print(arr2d[1])
print(arr2d[0,1])
print(arr2d[:2])
print(arr2d[0:2,0:2])
print(arr2d[1,:2])
[[1 2 3]
 [4 5 6]]
[4 5 6]
2
[[1 2 3]
 [4 5 6]]
[[1 2]
 [4 5]]
[4 5]

1.5.2 花式(數(shù)組)索引的基本使用

demo_arr = np.empty((4,4))
for i in range(4):
    demo_arr[i] = np.arange(i,i + 4)
    
print(demo_arr)
print(demo_arr[[0,2]])
print(demo_arr[[1,3],[1,2]])
[[0. 1. 2. 3.]
 [1. 2. 3. 4.]
 [2. 3. 4. 5.]
 [3. 4. 5. 6.]]
[[0. 1. 2. 3.]
 [2. 3. 4. 5.]]
[2. 5.]

1.5.3 布爾型


student_name = np.array(['Tom',"Jack Ma",'Molly','Bruce'])
print(student_name)

student_score = np.array([[79, 88, 80], [89, 90, 92], [83, 78, 85], [78, 76, 80]])
print(student_score)

print(student_name == 'Jack Ma')
print(student_score[student_name == 'Bruce'])
print(student_score[student_name == 'Bruce',:1])
['Tom' 'Jack Ma' 'Molly' 'Bruce']
[[79 88 80]
 [89 90 92]
 [83 78 85]
 [78 76 80]]
[False  True False False]
[[78 76 80]]
[[78]]

1.6 數(shù)組的轉(zhuǎn)置和軸對(duì)稱


arr1 = np.arange(15).reshape(3, 5)
print(arr1)
print(arr1.T)
arr2 = np.arange(16).reshape((2,2,4))
print(arr2.transpose(1,2,0))
print(arr2.swapaxes(1,0))
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[[ 0  5 10]
 [ 1  6 11]
 [ 2  7 12]
 [ 3  8 13]
 [ 4  9 14]]
[[[ 0  8]
  [ 1  9]
  [ 2 10]
  [ 3 11]]

 [[ 4 12]
  [ 5 13]
  [ 6 14]
  [ 7 15]]]
[[[ 0  1  2  3]
  [ 8  9 10 11]]

 [[ 4  5  6  7]
  [12 13 14 15]]]

1.7 Numpy 通用函數(shù)

arr = np.array([4,9,16])
print(np.sqrt(arr))
print(np.abs(arr))

x = np.array([12,9,13,15])
y = np.array([11,10,4,8])

print(np.add(x,y))
print(np.multiply(x,y))
print(np.maximum(x,y))
print(np.greater(x,y))
[2. 3. 4.]
[ 4  9 16]
[23 19 17 23]
[132  90  52 120]
[12 10 13 15]
[ True False  True  True]

1.8 利用Numpy數(shù)組進(jìn)行數(shù)據(jù)處理

1.8.1 將條件邏輯轉(zhuǎn)為數(shù)組運(yùn)算

x = np.array([1,8,10])
y = np.array([11,4,8])
arr_con = np.array([True,False,True])
result = np.where(arr_con,x,y)
print(result)
[ 1  4 10]

1.8.2 數(shù)組統(tǒng)計(jì)運(yùn)算

arr = np.arange(10)

var1 = arr.sum()
var2 = arr.mean()
var3 = arr.min()
var4 = arr.max()
var5 = arr.argmin()
var6 = arr.argmax()
var7 = arr.cumsum()
var8 = arr.cumprod()

print(var1)
print(var2)
print(var3)
print(var4)
print(var5)
print(var6)
print(var7)
print(var8)
45
4.5
0
9
0
9
[ 0  1  3  6 10 15 21 28 36 45]
[0 0 0 0 0 0 0 0 0 0]
arr = np.arange(1,16).reshape((3,5))
print(arr)
print(np.diff(arr,axis=1))
print(np.diff(arr,axis=0))
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]]
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
[[5 5 5 5 5]
 [5 5 5 5 5]]
print(np.floor([-0.6,-1.4,-0.1,-1.8,0,1.4,1.7]))
print(np.ceil([1.2,1.5,1.8,2.1,2.0,-0.5,-0.6,-0.3]))

負(fù)數(shù)取整,向左叉庐。

[-1. -2. -1. -2.  0.  1.  1.]
[ 2.  2.  2.  3.  2. -0. -0. -0.]
arr = np.arange(10)
print(arr)
print(np.where(arr < 5 , arr, 10*arr))
[0 1 2 3 4 5 6 7 8 9]
[ 0  1  2  3  4 50 60 70 80 90]

1.8.4 檢索數(shù)組元素

arr = np.array([[4,6,8],[11,3,-8],[6,5,2]])
print(np.any(arr > 0))
print(np.all(arr > 0))
True
False

1.8.5 唯一化及其他集合邏輯

arr = np.array([13,45,6,77,8,13,12,12,2222])
print(np.unique(arr))
print(np.in1d(arr, [13,12]))
[   6    8   12   13   45   77 2222]
[ True False False False False  True  True  True False]

1.9 線性代數(shù)模塊

arr_x = np.array([[1,2,3],[4,5,6]])
arr_y = np.array([[1,2,],[3,4],[5,6]])
print(arr_x.dot(arr_y))
[[22 28]
 [49 64]]

1.10 隨機(jī)數(shù)模塊

print(np.random.rand(4,4))
print(np.random.rand(2,4,5))
[[0.81782247 0.19627196 0.47536585 0.0839395 ]
 [0.71840063 0.12909142 0.85735096 0.64975114]
 [0.41547986 0.37506747 0.2013906  0.01261993]
 [0.39221488 0.06204719 0.52023665 0.77400181]]
[[[0.8367346  0.85784458 0.96927022 0.82935407 0.72544339]
  [0.45293445 0.02093661 0.13855598 0.83985129 0.51082136]
  [0.8960852  0.47382384 0.62323173 0.9553976  0.13545716]
  [0.91273645 0.56919542 0.02027771 0.83513558 0.98522069]]

 [[0.65019463 0.68427283 0.8384966  0.26230144 0.67670195]
  [0.84063365 0.88312345 0.42528515 0.363616   0.75830665]
  [0.80756949 0.31635892 0.92864915 0.93583129 0.49753883]
  [0.90122766 0.34228892 0.01383052 0.95354365 0.50214403]]]
np.random.seed(42)
print(np.random.rand(3))

np.random.seed(42)
print(np.random.rand(3))
      
np.random.seed()
print(np.random.rand(3))     
[0.37454012 0.95071431 0.73199394]
[0.37454012 0.95071431 0.73199394]
[0.43855322 0.20868575 0.21541442]

其他

極客時(shí)間《數(shù)據(jù)分析專欄》

實(shí)例代碼

# create array
import numpy as np
a = np.array([1,3,4,5,9])
b = np.array([[1,3,5],[3,5,7],[4,1,2]])
b[1,1] = 10
print(a.shape, b.shape, a.dtype, )
print(b)

# construct array

persontype = np.dtype({
    'names':['name','age','chinese','math','english'],
    'formats':['S32','i', 'i', 'i', 'f']
})

peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
       ("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
    dtype=persontype)
ages = peoples[:]['age']
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']
print(np.mean(ages))
print(np.mean(chineses))
print(np.mean(maths))
print(np.mean(englishs))

print(englishs.dtype)

# incremental arrays

print(np.arange(1,21,3))
print(np.linspace(1,29,10))


# calculation

x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)

print(np.add(x1,x2))
print(np.subtract(x1,x2))
print(np.multiply(x1,x2))
print(np.divide(x1,x2))
print(np.power(x1,x2))
print(np.remainder(x1,x2))

# stats

a = np.array([[1,2,3],[2,3,4],[4,5,6]])
print(np.amin(a))
print(np.amin(a,0))
print(np.amin(a,1))
print(np.amax(a))
print(np.amax(a,0))
print(np.amax(a,1))

# distance = Maximum - Minimum

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(np.ptp(a))
print(np.ptp(a,0))
print(np.ptp(a,1))

## percentile 

print(np.percentile(a,50))
print(np.percentile(a,50,axis=0))
print(np.percentile(a,50,axis=1))

# average()

a = np.array([1,2,3,4])

wts = np.array([1,2,3,4])

print(np.average(a))
print(np.average(a,weights=wts))

# standard deviation & variance 

print(np.std(a))
print(np.var(a))

## sort

a = np.array([[2,3,4],[2,4,1]])

print(np.sort(a,))
print(np.sort(a,axis=None)
)
print(np.sort(a,axis=0)
)
print(np.sort(a,axis=1)
)

# quizz

scoretype = np.dtype({
    'names': ['name', 'chinese', 'english', 'math'],
    'formats': ['S32', 'i', 'i', 'i']})

peoples = np.array(
        [
            ("zhangfei", 66, 65, 30),
            ("guanyu", 95, 85, 98),
            ("zhaoyun", 93, 92, 96),
            ("huangzhong", 90, 88, 77),
            ("dianwei", 80, 90, 90)
        ], dtype=scoretype)

#print(peoples)

def check_scores(subject):
    print(f'{subject}|{np.mean(peoples[:][subject])}|{np.min(peoples[:][subject])}|{np.max(peoples[:][subject])}|{np.var(peoples[:][subject])}|{np.std(peoples[:][subject])}')
   
print("'subject'|'mean'|'min'|'max'|'var'|'std'")

check_scores('english')
check_scores('chinese')
check_scores('math')



print("ranking")
ranking = sorted(peoples,key=lambda x:x[1]+x[2]+x[3], reverse=True)
print(ranking)

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舒帮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌会前,老刑警劉巖好乐,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瓦宜,居然都是意外死亡蔚万,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門临庇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來反璃,“玉大人,你說我怎么就攤上這事假夺』打冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵已卷,是天一觀的道長梧田。 經(jīng)常有香客問我,道長侧蘸,這世上最難降的妖魔是什么裁眯? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮讳癌,結(jié)果婚禮上穿稳,老公的妹妹穿的比我還像新娘。我一直安慰自己晌坤,他們只是感情好逢艘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骤菠,像睡著了一般它改。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娩怎,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天搔课,我揣著相機(jī)與錄音,去河邊找鬼截亦。 笑死爬泥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崩瓤。 我是一名探鬼主播袍啡,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼却桶!你這毒婦竟也來了境输?” 一聲冷哼從身側(cè)響起蔗牡,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗅剖,沒想到半個(gè)月后辩越,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡信粮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年黔攒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片强缘。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡督惰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旅掂,到底是詐尸還是另有隱情赏胚,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布商虐,位于F島的核電站觉阅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秘车。R本人自食惡果不足惜留拾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲫尊。 院中可真熱鬧,春花似錦沦偎、人聲如沸疫向。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搔驼。三九已至,卻和暖如春侈询,著一層夾襖步出監(jiān)牢的瞬間舌涨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工扔字, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囊嘉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓革为,卻偏偏與公主長得像扭粱,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子震檩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 先決條件 在閱讀這個(gè)教程之前琢蛤,你多少需要知道點(diǎn)python蜓堕。如果你想從新回憶下,請(qǐng)看看Python Tutoria...
    舒map閱讀 2,580評(píng)論 1 13
  • 換工作之后博其,PYTHON就放下啦套才,基本沒接觸了,也都忘記的差不多了慕淡,現(xiàn)在重新?lián)炱饋?1.1 NumPy Array...
    wqh8384閱讀 570評(píng)論 0 1
  • 一背伴、numpy概述 numpy(Numerical Python)提供了python對(duì)多維數(shù)組對(duì)象的支持:ndar...
    L_steven的貓閱讀 3,470評(píng)論 1 24
  • NumPy是Python中關(guān)于科學(xué)計(jì)算的一個(gè)類庫,在這里簡(jiǎn)單介紹一下儡率。 來源:https://docs.scipy...
    灰太狼_black閱讀 1,228評(píng)論 0 5
  • ? 我最近總是做一個(gè)夢(mèng)挂据,夢(mèng)到有一個(gè)和我一模一樣的女生,站在黑暗的洞穴里對(duì)我笑儿普,笑得很滲人說:”哪個(gè)影子甘做影子呢崎逃?...
    望及閱讀 720評(píng)論 18 13