NumPy 數(shù)組使用

NumPy 數(shù)組使用

# 來源:NumPy Essentials ch3

向量化

import numpy as np 

# NumPy 數(shù)組的運(yùn)算是向量化的

# 數(shù)組和標(biāo)量運(yùn)算是每個(gè)元素和標(biāo)量運(yùn)算
x = np.array([1, 2, 3, 4]) 
x + 1 
# array([2, 3, 4, 5]) 

# 數(shù)組和數(shù)組運(yùn)算是逐元素運(yùn)算
y = np.array([-1, 2, 3, 0]) 
x * y 
array([-1,  4,  9,  0]) 

# 需要計(jì)算內(nèi)積的時(shí)候
# 使用np.dot
np.dot(x, y) 
# 12

# 所有邏輯運(yùn)算符也是向量化的
x == y 
# array([False,  True,  True, False], dtype=bool) 

# NumPy 使用 C 語言編譯出來的代碼來處理數(shù)據(jù)
# 所以很快
x = np.arange(10000)
'''
%timeit x + 1
100000 loops, best of 3: 12.6 μs per loop 
'''
y = range(10000)
'''
%timeit [i + 1 for i in y] 
1000 loops, best of 3: 458 μs per loop 
'''

x = np.arange(1,9) 
x.dtype 
# dtype('int32') 

# 整數(shù)和浮點(diǎn)的 div 運(yùn)算生成浮點(diǎn)
x = x / 10.0 
x 
# array([ 0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8]) 
x.dtype 
# dtype('float64') 

# 整數(shù)和浮點(diǎn)的 idiv 運(yùn)算
# 1.10 版之前生成整數(shù)
# 之后會(huì)報(bào)錯(cuò)
y = np.arange(1,9) 
y /= 10.0 
y 
# array([0, 0, 0, 0, 0, 0, 0, 0]) 
y.dtype 
# dtype('int32')

通用函數(shù)(ufunc)


# 通用函數(shù)在數(shù)組的每個(gè)元素上調(diào)用
# 也可以處理標(biāo)量
x = np.arange(5,10) 
np.square(x) 
# array([25, 36, 49, 64, 81]) 

# 也有二元的通用函數(shù)
y = np.ones(5) * 10 
np.mod(y, x) 
# array([ 0.,  4.,  3.,  2.,  1.]) 

# 一些函數(shù)名稱類似
# 但是效果不一樣
# np.minimum 逐元素計(jì)算較小值
# 屬于通用函數(shù)
# np.fmin 與之相同
np.minimum(x, 7)
# array([5, 6, 7, 7, 7]) 

# np.min 計(jì)算整個(gè)數(shù)組的最小值
# 屬于聚集函數(shù)
np.min(x) 
# 5

z = np.repeat(x, 3).reshape(5, 3) 
z 
'''
array([[5, 5, 5], 
       [6, 6, 6], 
       [7, 7, 7], 
       [8, 8, 8], 
       [9, 9, 9]]) 
'''
# 聚集函數(shù)一般會(huì)有 axis 參數(shù)
# 指定沿著哪個(gè)軸
# 如果不寫浙滤,則是全數(shù)組聚集
np.median(z) 
# 7.0 

# 軸 0 是沿 arr[0], arr[1] 方向的軸
# 對于二維數(shù)據(jù)來說纺腊,就是列方向
np.median(z, axis = 0) 
# array([ 7.,  7.,  7.]) 

# 軸 1 是沿 arr[0][0], arr[0][1] 方向的軸
# 對于二維數(shù)據(jù)來說揖膜,就是行方向
np.median(z, axis = 1) 
# array([ 5.,  6.,  7.,  8.,  9.]) 

# accumulate 計(jì)算累計(jì)
# accum[i] = arr[0] op ... op arr[i]
np.add.accumulate(x) 
array([ 5, 11, 18, 26, 35]) 


# outer 計(jì)算外積
# 返回矩陣壹粟,每個(gè)元素是 a[i] op b[j]
np.multiply.outer(x, x) 
'''
array([[25, 30, 35, 40, 45], 
       [30, 36, 42, 48, 54], 
       [35, 42, 49, 56, 63], 
       [40, 48, 56, 64, 72], 
       [45, 54, 63, 72, 81]]) 
'''

廣播和調(diào)整形狀

# 最簡單的就是通過 shape 屬性調(diào)整形狀
# 形狀乘起來要等于元素個(gè)數(shù)
# -1 表示由 NumPy 來計(jì)算,這里計(jì)算結(jié)果是 4
x = np.arange(24) 
x.shape = 2, 3, -1 
x 
'''
array([[[ 0,  1,  2,  3], 
        [ 4,  5,  6,  7], 
        [ 8,  9, 10, 11]], 
       [[12, 13, 14, 15], 
        [16, 17, 18, 19], 
        [20, 21, 22, 23]]]) 
'''

# 也可以使用 reshape 生成指定形狀的視圖
# 或者 resize 生成指定形狀的副本
# 而不會(huì)改動(dòng) x
y = x.reshape((2, 3, -1))

# flatten 創(chuàng)造展開后的副本
# ravel 創(chuàng)造展開后的視圖
x = np.arange(1000000) 
x.shape = 100, 100, 100 
'''
%timeit x.flatten() 
1000 loops, best of 3: 1.14 ms per loop 
%timeit x.ravel() 
1000000 loops, best of 3: 330 ns per loop 
'''

向量堆疊

x = np.arange (0, 10, 2) 
y = np.arange (0, -5, -1)

# vstack 是豎直堆疊犀呼,也就是沿倒數(shù)第二個(gè)軸堆疊
# 一維數(shù)組只有一個(gè)軸薇组,所以會(huì)新增一個(gè)維度
# 結(jié)果會(huì)創(chuàng)建一維數(shù)組的數(shù)組
np.vstack([x, y]) 
'''
array([[ 0,  2,  4,  6,  8], 
       [ 0, -1, -2, -3, -4]]) 
'''

# hstack 是數(shù)值堆疊律胀,也就是沿倒數(shù)第一個(gè)軸堆疊
# 對于一維數(shù)組是首尾拼接
np.hstack([x, y])
# array([ 0,  2,  4,  6,  8,  0, -1, -2, -3, -4]) 

# dstack 是縱深堆疊
# 所以結(jié)果是三維數(shù)組
np.dstack([x, y]) 
'''
array([[[ 0,  0], 
        [ 2, -1], 
        [ 4, -2], 
        [ 6, -3], 
        [ 8, -4]]]) 
'''

布爾索引


# 布爾數(shù)組可通過數(shù)組的邏輯運(yùn)算來獲取
x = np.array([1,3,-1, 5, 7, -1])
mask = (x < 0) 
mask 
# array([False, False,  True, False, False,  True], dtype=bool) 

# NumPy 可接受布爾數(shù)組作為索引
# 布爾數(shù)組的形狀需要與原數(shù)組一致
# True 元素表示取該值罪佳,F(xiàn)alse 表示不取
# 結(jié)果是一維數(shù)組
x [mask] = 0
x
# array([1, 3, 0, 5, 7, 0]) 

# 布爾數(shù)組可以使用 sum 方法來統(tǒng)計(jì) True 的個(gè)數(shù)
# 原理是調(diào)用 sum 時(shí)會(huì)將 False 轉(zhuǎn)換成 0
# True 轉(zhuǎn)換成 1
x = np.random.random(50)
(x > .5).sum()
# 20 

助手函數(shù)


# lookfor 用于搜索包含指定單詞的函數(shù)
np.lookfor('resize')
'''
Search results for 'resize' 
--------------------------- 
numpy.ma.resize 
    Return a new masked array with the specified size and shape. 
numpy.chararray.resize 
    Change shape and size of array in-place. 
numpy.oldnumeric.ma.resize 
    The original array's total size can be any size. 
numpy.resize 
    Return a new array with the specified shape. 
'''

# 每個(gè)函數(shù)或方法的文檔字符串中
# 都包含它的 API 文檔
print np.arange.__doc__
'''
arange([start,] stop[, step,], dtype=None)

    Return evenly spaced values within a given interval.

    Values are generated within the half-open interval ``[start, stop)``
    (in other words, the interval including `start` but excluding `stop`).
    For integer arguments the function is equivalent to the Python built-in
    `range <http://docs.python.org/lib/built-in-funcs.html>`_ function,
    but returns an ndarray rather than a list.
    
...
'''
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蕾管,隨后出現(xiàn)的幾起案子掰曾,更是在濱河造成了極大的恐慌旷坦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異岗屏,居然都是意外死亡这刷,警方通過查閱死者的電腦和手機(jī)暇屋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人著瓶,你說我怎么就攤上這事〔脑” “怎么了沸久?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長余蟹。 經(jīng)常有香客問我卷胯,道長,這世上最難降的妖魔是什么威酒? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任诵竭,我火速辦了婚禮,結(jié)果婚禮上兼搏,老公的妹妹穿的比我還像新娘卵慰。我一直安慰自己,他們只是感情好佛呻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布裳朋。 她就那樣靜靜地躺著,像睡著了一般吓著。 火紅的嫁衣襯著肌膚如雪鲤嫡。 梳的紋絲不亂的頭發(fā)上送挑,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音暖眼,去河邊找鬼惕耕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诫肠,可吹牛的內(nèi)容都是我干的司澎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼栋豫,長吁一口氣:“原來是場噩夢啊……” “哼挤安!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丧鸯,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛤铜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后丛肢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體围肥,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蜂怎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了穆刻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡派敷,死狀恐怖蛹批,靈堂內(nèi)的尸體忽然破棺而出撰洗,到底是詐尸還是另有隱情篮愉,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布差导,位于F島的核電站试躏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏设褐。R本人自食惡果不足惜颠蕴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望助析。 院中可真熱鬧犀被,春花似錦、人聲如沸外冀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雪隧。三九已至西轩,卻和暖如春员舵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藕畔。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工马僻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人注服。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓韭邓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祠汇。 傳聞我的和親對象是個(gè)殘疾皇子仍秤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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