python中數(shù)組(numpy.array)的基本操作

<article>

本文部分內(nèi)容參考Daetalus的博客徒欣。

為什么要用numpy

  • Python中提供了list容器塑娇,可以當作數(shù)組使用翁涤。但列表中的元素可以是任何對象晚吞,因此列表中保存的是對象的指針延旧,這樣一來,為了保存一個簡單的列表[1,2,3]槽地。就需要三個指針和三個整數(shù)對象迁沫。對于數(shù)值運算來說,這種結(jié)構(gòu)顯然不夠高效捌蚊。
  • Python雖然也提供了array模塊集畅,但其只支持一維數(shù)組,不支持多維數(shù)組缅糟,也沒有各種運算函數(shù)挺智。因而不適合數(shù)值運算。
  • NumPy的出現(xiàn)彌補了這些不足窗宦。

(——摘自張若愚的《Python科學計算》)

import numpy as np

數(shù)組創(chuàng)建

## 常規(guī)創(chuàng)建方法
a = np.array([2,3,4])
b = np.array([2.0,3.0,4.0])
c = np.array([[1.0,2.0],[3.0,4.0]])
d = np.array([[1,2],[3,4]],dtype=complex) # 指定數(shù)據(jù)類型
print a, a.dtype
print b, b.dtype
print c, c.dtype
print d, d.dtype
[2 3 4] int32
[ 2\.  3\.  4.] float64
[[ 1\.  2.]
 [ 3\.  4.]] float64
[[ 1.+0.j  2.+0.j]
 [ 3.+0.j  4.+0.j]] complex128

## 創(chuàng)建數(shù)組的常用函數(shù)
print np.arange(0,7,1,dtype=np.int16) # 0為起點赦颇,間隔為1時可缺省(引起歧義下不可缺省)
print np.ones((2,3,4),dtype=np.int16) # 2頁二鳄,3行,4列媒怯,全1订讼,指定數(shù)據(jù)類型
print np.zeros((2,3,4)) # 2頁,3行沪摄,4列躯嫉,全0
print np.empty((2,3)) #值取決于內(nèi)存
print np.arange(0,10,2) # 起點為0,不超過10杨拐,步長為2
print np.linspace(-1,2,5) # 起點為-1祈餐,終點為2,取5個點 
print np.random.randint(0,3,(2,3)) # 大于等于0哄陶,小于3帆阳,2行3列的隨機整數(shù)
[0 1 2 3 4 5 6]
[[[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]

 [[1 1 1 1]
  [1 1 1 1]
  [1 1 1 1]]]
[[[ 0\.  0\.  0\.  0.]
  [ 0\.  0\.  0\.  0.]
  [ 0\.  0\.  0\.  0.]]

 [[ 0\.  0\.  0\.  0.]
  [ 0\.  0\.  0\.  0.]
  [ 0\.  0\.  0\.  0.]]]
[[  1.39069238e-309   1.39069238e-309   1.39069238e-309]
 [  1.39069238e-309   1.39069238e-309   1.39069238e-309]]
[0 2 4 6 8]
[-1\.   -0.25  0.5   1.25  2\.  ]
[[1 0 1]
 [0 1 0]]

## 類型轉(zhuǎn)換
print float(1)
print int(1.0)
print bool(2)
print float(True)
1.0
1
True
1.0

數(shù)組輸出

  • 從左到右,從上向下
  • 一維數(shù)組打印成行屋吨,二維數(shù)組打印成矩陣蜒谤,三維數(shù)組打印成矩陣列表
print np.arange(1,6,2)
print np.arange(12).reshape(3,4) # 可以改變輸出形狀
print np.arange(24).reshape(2,3,4)# 2頁,3行至扰,4頁
[1 3 5]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

基本運算

## 元素級運算
a = np.array([1,2,3,4])
b = np.arange(4)
print a, b
print a-b
print a*b
print a**2
print 2*np.sin(a)
print a>2
print np.exp(a) # 指數(shù)
[1 2 3 4] [0 1 2 3]
[1 1 1 1]
[ 0  2  6 12]
[ 1  4  9 16]
[ 1.68294197  1.81859485  0.28224002 -1.51360499]
[False False  True  True]
[  2.71828183   7.3890561   20.08553692  54.59815003]

## 矩陣運算(二維數(shù)組)
a = np.array([[1,2],[3,4]]) # 2行2列
b = np.arange(6).reshape((2,-1)) # 2行3列
print a,b
print a.dot(b) # 2行3列
[[1 2]
 [3 4]] [[0 1 2]
 [3 4 5]]
[[ 6  9 12]
 [12 19 26]]

## 非數(shù)組運算鳍徽,調(diào)用方法
a = np.random.randint(0,5,(2,3))
print a
print a.sum(),a.sum(axis=1),a.sum(0) # axis用于指定運算軸(默認全部,可指定0或1)
print a.min(),a.max(axis=1),a.mean(axis=1) # axis = 0: 按列計算敢课,axis = 1: 按行計算
print a.cumsum(1) # 按行計算累積和
[[2 3 3]
 [0 2 1]]
11 [8 3] [2 5 4]
0 [3 2] [ 2.66666667  1\.        ]
[[2 5 8]
 [0 2 3]]

索引阶祭,切片,迭代

## 一維數(shù)組
a = np.arange(0,10,1)**2
print a 
print a[0],a[2],a[-1],a[-2] # 索引從0開始直秆,-1表示最后一個索引
print a[2:5],a[-5:-1] # 包括起點濒募,不包括終點
a[-1] = 100; print a # 賦值
a[1:4]=100; print a # 批量賦值
a[:6:2] = -100; print a # 從開始到第6個索引,每隔一個元素(步長=2)賦值
print a[: :-1];print a # 將a逆序輸出圾结,a本身未發(fā)生改變
b = [np.sqrt(np.abs(i)) for i in a]; print b # 通過遍歷賦值
[ 0  1  4  9 16 25 36 49 64 81]
0 4 81 64
[ 4  9 16] [25 36 49 64]
[  0   1   4   9  16  25  36  49  64 100]
[  0 100 100 100  16  25  36  49  64 100]
[-100  100 -100  100 -100   25   36   49   64  100]
[ 100   64   49   36   25 -100  100 -100  100 -100]
[-100  100 -100  100 -100   25   36   49   64  100]
[10.0, 10.0, 10.0, 10.0, 10.0, 5.0, 6.0, 7.0, 8.0, 10.0]

## 多維數(shù)組
a = np.arange(0,20).reshape((4,5))
print a, a[2,3], a[:,1], a[1:4,2], a[1:3,:]
print a[-1] # 相當于a[-1,:],即索引少于軸數(shù)時瑰剃,確實的索引默認為整個切片

b = np.arange(0,24).reshape((2,3,4))
print b,b[1] # 相當于b[1,:,:] 和b[1,...]
print '-------------------'
for row in a:
    print row # 遍歷以第一個軸為基礎(chǔ)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]] 13 [ 1  6 11 16] [ 7 12 17] [[ 5  6  7  8  9]
 [10 11 12 13 14]]
[15 16 17 18 19]
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

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

形狀操作

a = np.floor(10*np.random.random((3,4)))
print a, a.shape #輸出a的形狀
print a.ravel() # 輸出平坦化后的a(a本身不改變)
a.shape = (6,2); print a # 改變a的形狀
print a.transpose() # 輸出a的轉(zhuǎn)置

[[ 0\.  4\.  3\.  2.]
 [ 1\.  1\.  3\.  3.]
 [ 4\.  4\.  6\.  5.]] (3, 4)
[ 0\.  4\.  3\.  2\.  1\.  1\.  3\.  3\.  4\.  4\.  6\.  5.]
[[ 0\.  4.]
 [ 3\.  2.]
 [ 1\.  1.]
 [ 3\.  3.]
 [ 4\.  4.]
 [ 6\.  5.]]
[[ 0\.  3\.  1\.  3\.  4\.  6.]
 [ 4\.  2\.  1\.  3\.  4\.  5.]]

## 補充:reshape和resize
a = np.array([[1,2,3],[4,5,6]])
b = a
a.reshape((3,2))# 不改變數(shù)組本身的形狀
print a
b.resize((3,2))# 改變數(shù)組本身形狀
print b
[[1 2 3]
 [4 5 6]]
[[1 2]
 [3 4]
 [5 6]]

</article>

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請注明出處筝野。 https://blog.csdn.net/sinat_34474705/article/details/74458605

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晌姚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歇竟,更是在濱河造成了極大的恐慌舀凛,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件途蒋,死亡現(xiàn)場離奇詭異,居然都是意外死亡馋记,警方通過查閱死者的電腦和手機号坡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門懊烤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宽堆,你說我怎么就攤上這事腌紧。” “怎么了畜隶?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵壁肋,是天一觀的道長。 經(jīng)常有香客問我籽慢,道長浸遗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任箱亿,我火速辦了婚禮跛锌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘届惋。我一直安慰自己髓帽,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布脑豹。 她就那樣靜靜地躺著郑藏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘩欺。 梳的紋絲不亂的頭發(fā)上必盖,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音击碗,去河邊找鬼筑悴。 笑死,一個胖子當著我的面吹牛稍途,可吹牛的內(nèi)容都是我干的阁吝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼械拍,長吁一口氣:“原來是場噩夢啊……” “哼突勇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坷虑,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤甲馋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后迄损,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體定躏,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了痊远。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垮抗。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碧聪,靈堂內(nèi)的尸體忽然破棺而出冒版,到底是詐尸還是另有隱情,我是刑警寧澤逞姿,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布辞嗡,位于F島的核電站,受9級特大地震影響滞造,放射性物質(zhì)發(fā)生泄漏续室。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一断部、第九天 我趴在偏房一處隱蔽的房頂上張望猎贴。 院中可真熱鬧,春花似錦蝴光、人聲如沸她渴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趁耗。三九已至,卻和暖如春疆虚,著一層夾襖步出監(jiān)牢的瞬間苛败,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工径簿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罢屈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓篇亭,卻偏偏與公主長得像缠捌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子译蒂,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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