Python基礎學習|numpy的常見數組操作

讀取數據

np.loadtxt(name,dtype=, comments='#',delimiter=None, converters=None, skiprows=0, usecols=(1,2), unpack=False,ndmin=0)
frame:文件、字符串或產生器
dtype:數據類型,默認np.float
comments:跳過某些行纵刘,這里指, 如果行的開頭為#就會跳過該行
delimiter:分隔字符串啸箫,默認空格
converters:對數據進行預處理的參數, 可以先定義一個函數
skiprows:跳過前幾行赛惩,默認0
usecols:只讀取指定列煌茬,這里指只讀取1,2列址否,默認全部讀取
unpack:如果為True局蚀,將按列讀取麦锯,默認False
converters:對數據進行預處理的參數, 我們可以先定義一個函數

txt文檔內容

txt = 'c:\\Users\\loadtxt.txt'
a = np.loadtxt(txt,dtype=int,delimiter=',',skiprows=1,unpack=True)
#Out: 
#array([[ 2,  3,  4],
#       [ 3,  4,  5],
#       [ 4,  5,  6],
#       [ 5,  6,  7],
#       [ 6,  7,  8],
#       [ 7,  8,  9],
#       [ 8,  9, 10],
#       [ 9, 10, 11]])

創(chuàng)建數組

np.array():創(chuàng)建數組
np.array(range(start, stop, step))
  start: 計數從 start 開始。默認是從 0 開始;
  stop: 計數到 stop 結束琅绅,但不包括 stop扶欣;
  step:步長,不可為小數千扶,默認為1料祠。
np.arange(start, stop, step)
  start: 計數從 start 開始。默認是從 0 開始;
  stop: 計數到 stop 結束澎羞,但不包括 stop髓绽;
  step:步長,支持小數煤痕,默認為1梧宫。

import numpy as np

a = np.array([1,2,3,4,5])
b = np.array(range(1,6,2))
c = np.arange(1,6,1.5)
print('a:%s b:%s c:%s' %(a,b,c))
#[out]:a:[1 2 3 4 5] b:[1 3 5] c:[1.  2.5 4.  5.5]

生成隨機數組

np.random.rand(a,b):隨機生成a行b列的數組,數組元素符合[0,1]之間均勻分布的隨機樣本

np.random.rand(2,3)
#Out: 
#array([[0.69316799, 0.60458541, 0.01979631],
#       [0.75141108, 0.48813725, 0.05425274]])

np.random.randn(a,b):隨機生成a行b列的數組摆碉,數組元素符合標準正態(tài)分布N(0,1)

np.random.randn(2,3)
#Out: 
#array([[-0.49229221, -1.66797528,  1.41183768],
#       [ 0.79337647, -0.66594975,  0.35059854]])

np.random.randint(low,high,size=(a,b),dtype):隨機生成a行b列的數組塘匣,數組元素為半開半閉區(qū)間[low,high)上離散均勻分布的整數值;若high=None,則取值區(qū)間變?yōu)閇0,low)

np.random.randint(1,5,size=(2,3),dtype=int)
#Out: 
#array([[4, 4, 4],
#       [4, 4, 1]])

np.random.normal(loc=a,scale=b,size=(c,d)) :隨機生成c行d列的數組巷帝,數組元素符合均值為a標準差為b正態(tài)分布忌卤。

np.random.normal(loc=0,scale=1,size=(2,3))
#Out: 
#array([[ 0.52191241, -1.24927379, -0.06311665],
#       [-1.75515889, -1.3952226 ,  0.447512  ]])

np.random.random(size=a) :隨機產生a個元素的一維數組,元素為[0.0, 1.0)之間的浮點數楞泼,默認size=None驰徊,此時只生成一個隨機浮點數

np.random.random(size=3)
#Out: array([0.27244681, 0.99441891, 0.86932329])
np.random.random()
#Out: 0.6599702555660103

數組形狀

np.shape(a):輸出元組(),包含數組a維度堕阔,行數棍厂,列數。
a.reshape((a,b):將數組a的形狀改為a行b列超陆,若不知道a的shape屬性是多少牺弹,但是想讓a變成只有一列浦马,可使用a.reshape(-1,1),Numpy將自動計算行數张漂。
a.transpose():對a轉置

a = np.array([[1,2,3],[4,5,6]])
np.shape(a)
#Out: (2, 3)
a.reshape((3,2))
#Out: 
#array([[1, 2],
#       [3, 4],
#       [5, 6]])
a.reshape((-1,1))
#Out: 
#array([[1],
#       [2],
#       [3],
#       [4],
#       [5],
#       [6]])
a = np.array([[1,2,3],[4,5,6]])
a.transpose()
#Out: 
#array([[1, 4],
#       [2, 5],
#       [3, 6]])

a.transpose():對a轉置晶默,當數組為高維時,如參數為(1,0,2)表示將1軸變?yōu)?軸航攒,0軸變?yōu)?軸磺陡,2軸不變,如下圖

轉換前

轉換后

a = np.array([[[ 0,  1,  2,  3],
               [ 4,  5,  6,  7]],

              [[ 8,  9, 10, 11],
               [12, 13, 14, 15]]])
A.transpose((1,0,2))
#Out: 
#array([[[ 0,  1,  2,  3],
#        [ 8,  9, 10, 11]],
#
#       [[ 4,  5,  6,  7],
#        [12, 13, 14, 15]]])

數組計算

兩個數組的相加漠畜、相減以及相乘都是對應元素之間的操作币他。
廣播的原則:如果兩個數組的后緣維度(trailing dimension,即從末尾開始算起的維度)的軸長度相符憔狞,或其中的一方的長度為1圆丹,則認為它們是廣播兼容的。廣播會在缺失和(或)長度為1的維度上進行躯喇。



a = np.array([[1,2,3],[1,2,3]])
a*2
#[Out]: 
#array([[2, 4, 6],
#       [2, 4, 6]])
b = np.array([[1,1,1],[1,1,1]])
a-b
#[Out]: 
#array([[0, 1, 2],
#       [0, 1, 2]])
c = np.array([[1,2,3]])
a+c
#Out: 
#array([[2, 4, 6],
#       [2, 4, 6]])
d = np.array([[[1,1,1],[1,1,1]],[[1,1,1],[1,1,1]],[[1,1,1],[1,1,1]]])
a+d
#Out[25]: 
#array([[[2, 3, 4],
#       [2, 3, 4]],
#
#       [[2, 3, 4],
#        [2, 3, 4]],
#
#      [[2, 3, 4],
#        [2, 3, 4]]])

索引和切片

a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[[0,1],:] #切片a的第一行第二行所有元素
#Out: 
#array([[1, 2, 3],
#       [2, 3, 4]])
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[[0,1],[0,2]] #切片a的第一行第一列和第二行第三列的元素
#Out: array([1, 4])

替換

a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[0,0]=3 #將第一行第一列的元素替換成1
print(a)
#[[3 2 3]
# [2 3 4]
# [3 4 5]]
a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a[a<3]=6 #將小于3的所有元素替換成6
print(a)
#[[6 6 3]
# [6 3 4]
# [3 4 5]]

np.where(condition, x,y):滿足條件(condition)辫封,輸出x,不滿足輸出y廉丽。

a = np.array([[1,2,3],[2,3,4],[3,4,5]])
np.where(a<3, 6, a)
#Out: 
#array([[6, 6, 3],
#       [6, 3, 4],
#       [3, 4, 5]])

np.where(condition):只有條件 (condition)倦微,沒有x和y,則輸出滿足條件 (即非0) 元素的坐標

a = np.array([[1,2,3],[2,3,4],[3,4,5]])
np.where(a<4)
#Out[35]: 
#(array([0, 0, 0, 1, 1, 2], dtype=int64),
# array([0, 1, 2, 0, 1, 0], dtype=int64))

a.clip(min, max):限制數組a的上下界正压,給定一個范圍[a, b]欣福,數組中元素值小于a的,要被更改為a焦履,數組中元素值大于b的拓劝,要被更改為b。

a = np.array([[1,2,3],[2,3,4],[3,4,5]])
a.clip(2,4)
#Out: 
#array([[2, 2, 3],
#       [2, 3, 4],
#       [3, 4, 4]])

數組拼接

np.vstack((a,b)):將a嘉裤,b兩個數組按行放到一起
np.hstack((a,b)):將a郑临,b兩個數組按列放到一起

a = np.array([[1,2,3],[2,3,4]])
b = np.array([[3,4,5]])
np.vstack((a,b))
#Out: 
#array([[1, 2, 3],
#       [2, 3, 4],
#       [3, 4, 5]])
a = np.array([[1,2,3],[2,3,4]])
b = np.array([[1,2],[2,3]])
np.hstack((a,b))
#Out: 
#array([[1, 2, 3, 1, 2],
#       [2, 3, 4, 2, 3]])

常用統(tǒng)計函數

a=np.array([[1,2,3],[1,2,3]])
a.sum(axis=0) #列元素求和
#Out: array([2, 4, 6])
a=np.array([[1,2,3],[1,2,3]])
a.sum(axis=1) #行元素求和
#Out: array([6, 6])
a=np.array([[1,2,3],[1,2,3]])
a.sum() #所有元素求和
#Out: 12
a=np.array([[1,2,3],[1,2,3]])
a.mean(axis=0) #列元素求均值
#Out: array([1., 2., 3.])
a=np.array([[1,2,3],[1,2,3]])
np.median(a,axis=0) #列元素求中位數
#Out: array([1., 2., 3.])
a=np.array([[1,2,3],[4,5,6]])
a.min(axis=0) #列元素求最小值
#Out: array([1, 2, 3])
a=np.array([[1,2,3],[4,5,6]])
a.max(axis=0) #列元素求最大值
#Out: array([4, 5, 6])
a=np.array([[1,2,3],[4,5,6]])
np.ptp(a,axis=0) #列元素求最大值與最小值之差
#Out: array([3, 3, 3])
a=np.array([[1,2,3],[4,5,6]])
a.std(axis=0) #列元素求標準差
#Out: array([1.5, 1.5, 1.5])

數組復制

a=b:完全不復制,a和b相互影響

a=np.array([[1,2,3],[4,5,6]])
b=a
#Out: 
#a:array([[1, 2, 3],
#        [4, 5, 6]])
#b:array([[1, 2, 3],
#        [4, 5, 6]])
a[1,1]=10
#Out: 
#a:array([[ 1,  2,  3],
#        [ 4, 10,  6]])
#b:array([[ 1,  2,  3],
#        [ 4, 10,  6]])
b[1,1]=0
#Out: 
#a:array([[1, 2, 3],
#       [4, 0, 6]])
#b:array([[1, 2, 3],
#       [4, 0, 6]])

a = b[:]:視圖的操作屑宠,會創(chuàng)建一個新對象a厢洞,但a的數據完全由b保管,兩個數據變化一致典奉,其與a=b的區(qū)別為:a=b將創(chuàng)建a與b兩個快捷方式并指向同一文件躺翻;而a=b[:]先將b指向的文件復制一份作為副本,然后創(chuàng)建一個指向該副本的快捷方式a卫玖。
a=b.copy():復制公你,互相不影響

a=np.array([[1,2,3],[4,5,6]])
b=a.copy()
#Out: 
#a:array([[1, 2, 3],
#         [4, 5, 6]])
#b:array([[1, 2, 3],
#         [4, 5, 6]])
a[1,1]=10
#Out: 
#a:array([[ 1,  2,  3],
#         [ 4, 10,  6]])
#b:array([[1, 2, 3],
#         [4, 5, 6]])
b[1,1]=0
#Out: 
#a:array([[ 1,  2,  3],
#         [ 4, 10,  6]])
#b:array([[1, 2, 3],
#         [4, 0, 6]])

其他函數

np.zeros((3,3)) #創(chuàng)建一個3行3列全為0的數組
#Out: 
#array([[0., 0., 0.],
#       [0., 0., 0.],
#       [0., 0., 0.]])
np.eye(3) #創(chuàng)建一個對角線全為1的3行3列的方陣
#Out: 
#array([[1., 0., 0.],
#       [0., 1., 0.],
#       [0., 0., 1.]])
a = np.array([[1,2,3],[4,5,6]])
np.argmax(a,axis=0) #獲取列上最大值的位置
#Out: array([1, 1, 1], dtype=int64)
np.argmin(a,axis=1) #獲取行上最小值的位置
#Out: array([0, 0], dtype=int64)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市假瞬,隨后出現的幾起案子陕靠,更是在濱河造成了極大的恐慌嚣崭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦傍,死亡現場離奇詭異,居然都是意外死亡芦劣,警方通過查閱死者的電腦和手機粗俱,發(fā)現死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虚吟,“玉大人寸认,你說我怎么就攤上這事〈浚” “怎么了偏塞?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邦鲫。 經常有香客問我灸叼,道長,這世上最難降的妖魔是什么庆捺? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任古今,我火速辦了婚禮,結果婚禮上滔以,老公的妹妹穿的比我還像新娘捉腥。我一直安慰自己,他們只是感情好你画,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布抵碟。 她就那樣靜靜地躺著,像睡著了一般坏匪。 火紅的嫁衣襯著肌膚如雪拟逮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天适滓,我揣著相機與錄音唱歧,去河邊找鬼。 笑死粒竖,一個胖子當著我的面吹牛颅崩,可吹牛的內容都是我干的。 我是一名探鬼主播蕊苗,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼沿后,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朽砰?” 一聲冷哼從身側響起尖滚,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喉刘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漆弄,有當地人在樹林里發(fā)現了一具尸體睦裳,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年撼唾,在試婚紗的時候發(fā)現自己被綠了廉邑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡倒谷,死狀恐怖蛛蒙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情渤愁,我是刑警寧澤牵祟,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站抖格,受9級特大地震影響诺苹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜雹拄,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一筝尾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧办桨,春花似錦筹淫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至殊霞,卻和暖如春摧阅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绷蹲。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工棒卷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祝钢。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓比规,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拦英。 傳聞我的和親對象是個殘疾皇子蜒什,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348