numpy常用操作

numpy

numpy是一個(gè)開源的python科學(xué)計(jì)算庫,使用ndarray對象處理任意維度的數(shù)組

1.ndarray相對原生python列表優(yōu)勢:

1.內(nèi)存塊存儲(chǔ)優(yōu)勢:ndarray在存儲(chǔ)元素是內(nèi)存連續(xù)屿聋,而python原生list存儲(chǔ)元素是選擇元素外置的形式案淋,查找時(shí)通過尋址方式找到下一個(gè)元素匀奏,在科學(xué)計(jì)算時(shí)埂陆,ndarray的速度快于list乘盖。

2.ndarray支持并行化運(yùn)算(向量化運(yùn)算)

3.numpy底層編寫使用c語言早歇,內(nèi)部解除了GIL(全局解釋鎖)

2.ndarray的屬性:

import numpy as np

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

a

array([[1, 2, 3],

? ? ? [4, 5, 6]])

ndarray.shape 數(shù)組維度的元組

a.shape

(2, 3)

ndarray.ndim數(shù)組維數(shù)

a.ndim

2

ndarray.size 數(shù)組眾元素的數(shù)量

a.size

6

ndarray.itemsize 一個(gè)數(shù)組元素的長度(字節(jié))

a.itemsize

4

ndarray.dtype? 數(shù)組元素的類型

a.dtype

dtype('int32')

3.創(chuàng)建數(shù)組的時(shí)候指定 數(shù)組 類型

a = np.array([[1, 2, 3],[4, 5, 6]], dtype=np.float32)

a.dtype

dtype('float32')

4.astype方法顯式地轉(zhuǎn)換其dtype類型

a.astype(np.int64)

array([[1, 2, 3],

? ? ? [4, 5, 6]], dtype=int64)

5. 生成數(shù)組的方法

1 生成0和1的數(shù)組?

np.ones([3,4])?

array([[1., 1., 1., 1.],

? ? ? [1., 1., 1., 1.],

? ? ? [1., 1., 1., 1.]])

np.zeros([3,4])

array([[0., 0., 0., 0., 0.],

? ? ? [0., 0., 0., 0., 0.]])

2.從現(xiàn)有數(shù)組生成

b = np.array(a)

c = np.copy(a)

d = np.asarray(a)

array([[1, 2, 3],

? ? ? [4, 5, 6]], dtype=int64)

當(dāng)改變a中元素時(shí)倾芝,b,c中元素不改變,d中元素也隨之改變

b,c相當(dāng)于深拷貝箭跳,d相當(dāng)于淺拷貝

3.生成固定范圍的數(shù)組

np.linspace(start,stop,num,endpoint,retstep,dtype)

start 序列的起始值? ?stop 序列的終止值晨另,

如果endpoint為true,該值包含于序列中

num 要生成的等間隔樣例數(shù)量谱姓,默認(rèn)為50

endpoint 序列中是否包含stop值借尿,默認(rèn)為ture

retstep 如果為true,返回樣例屉来,以及連續(xù)數(shù)字之間的步長

dtype 輸出ndarray的數(shù)據(jù)類型

np.linspace(0,100,10)

array([ 0. , 11.11111111, 22.22222222, 33.33333333,

? ? ? ? 44.44444444,? 55.55555556,? 66.66666667,? 77.77777778,

? ? ? ? 88.88888889, 100.? ? ? ? ])

numpy.arange(start,stop, step, dtype)

np.arange(0,100,10)

array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

4 生成隨機(jī)數(shù)組?

均勻分布:

np.random.rand(d0,?d1,?...,?dn)

返回[0.0路翻,1.0)內(nèi)的一組均勻分布的數(shù)。

np.random.uniform(ow=0.0,?high=1.0,?size=None)

從一個(gè)均勻分布[low,high)中隨機(jī)采樣茄靠,注意定義域是左閉右開茂契,即包含low,不包含high.

size: 輸出樣本數(shù)目嘹黔,為int或元組(tuple)類型

返回值:ndarray類型账嚎,其形狀和參數(shù)size中描述一致。

np.random.randint(low,?high=None,?size=None,?dtype='l')

從一個(gè)均勻分布中隨機(jī)采樣儡蔓,生成一個(gè)整數(shù)或N維整數(shù)數(shù)組郭蕉,取數(shù)范圍:若high不為None時(shí),取[low,high)之間隨機(jī)整數(shù)喂江,否則取值[0,low)之間隨機(jī)整數(shù)召锈。

正態(tài)分布:

np.ramdom.randn(d0, d1, …, dn)

功能:從標(biāo)準(zhǔn)正態(tài)分布中返回一個(gè)或多個(gè)樣本值

np.random.normal(loc=0.0,?scale=1.0,?size=None)

loc:float? ?此概率分布的均值(對應(yīng)著整個(gè)分布的中心centre)

scale:float 此概率分布的標(biāo)準(zhǔn)差(對應(yīng)于分布的寬度,scale越大越矮胖获询,scale越小涨岁,越瘦高)

size:int or tuple of ints? 輸出的shape拐袜,默認(rèn)為None,只輸出一個(gè)值

np.random.standard_normal(size=None)

返回指定形狀的標(biāo)準(zhǔn)正態(tài)分布的數(shù)組梢薪。

5.數(shù)組的索引蹬铺、切片 先行后列

a[0][1] 或a[0,1]? 單個(gè)

2?

a[0][1:3] 或a[0,1:3] 多個(gè)

array([2, 3], dtype=int64)

6.形狀修改

ndarray.reshape(shape[, order])

a.reshape([3,2])??只是將形狀進(jìn)行了修改,但并沒有將行列進(jìn)行轉(zhuǎn)換

array([[ 1, 2],

? ? ? [? 3,? 4],

? ? ? [100,? 6]], dtype=int64)

a.reshape([-1,3])??數(shù)組的形狀被修改為:[-1,3], -1: 表示通過待計(jì)算,確定好了列秉撇,行通過計(jì)算甜攀,自動(dòng)得到,但列也必須能和行相乘琐馆,等于元素總數(shù)规阀。

array([[ 1, 2, 3],

? ? ? [? 4, 100,? 6]], dtype=int64)

ndarray.T 數(shù)組的轉(zhuǎn)置

將數(shù)組的行、列進(jìn)行互換

a.T

array([[ 1, 4],

? ? ? [? 2, 100],

? ? ? [? 3,? 6]], dtype=int64)

ndarray.resize(new_shape[, refcheck]) ,直接修改原數(shù)組形狀

a.resize([3,2])

a

array([[ 1, 2],

? ? ? [? 3,? 4],

? ? ? [100,? 6]], dtype=int64)

7.ndarray對象轉(zhuǎn)化為其它類型對象

a.tostring(),a.tobytes(),a.tolist()

type(a)

numpy.ndarray

b = a.tobytes()

type(b)

bytes

8.數(shù)組的去重,變?yōu)橐痪S的ndarray對象

ndarray.unique()

a[0,0] = 2

a

np.unique(a)

array([ 2, 3, 4, 6, 100], dtype=int64)

9.ndarray運(yùn)算

邏輯運(yùn)算

a > 3

array([[False, False],

? ? ? [False,? True],

? ? ? [ True,? True]])

通用判斷函數(shù)

np.all(),只要有一個(gè)false瘦麸,返回false谁撼,全是True,就返回True

np.all(a>3)

False

np.any()只要有一個(gè)true,返回true滋饲,全是False,就返回False

np.any(a>3)

True

np.where 三元運(yùn)算符

np.where(a>3,1111111111,0)

array([[ 0, 0],

? ? ? [? ? ? ? 0, 1111111111],

? ? ? [1111111111, 1111111111]])

進(jìn)行復(fù)合邏輯厉碟,聯(lián)合np.logical_and和np.logical_or

np.where(np.logical_and(a>3,a<5),222,0),在數(shù)組a中,大于3并且小于5的換為222屠缭,其它0.

array([[ 0, 0],

? ? ? [? 0, 222],

? ? ? [? 0,? 0]])

統(tǒng)計(jì)運(yùn)算

np.min(a[, axis,? keepdims]

axis=0/1 按行墨榄,還是按列

keedims=true:保存矩陣的二維特性

a

array([[ 2, 2],

? ? ? [? 3,? 4],

? ? ? [100,? 6]], dtype=int64)

np.min(a) 數(shù)組中最小元素

2?

np.min(a,axis=0) 每列最小,跨行

array([2, 2], dtype=int64)

np.min(a,axis=1)? 每行最小勿她,跨列

array([2, 3, 6], dtype=int64)

?max? mean? median var std同理

返回最大值、最小值所在位置阵翎,若有axis逢并,則返回一維ndarray對象,記錄每行或者每列中最大值或者最小值的下標(biāo)位置郭卫。

np.argmax()??

np.argmax(a,axis=0)? 按每列砍聊,跨行

array([2, 2], dtype=int64)

np.argmax(a,axis=1) 按每行,跨列

array([0, 1, 0], dtype=int64)

np.argmin()同理

10.數(shù)組間的運(yùn)算:

數(shù)組與數(shù)的運(yùn)算

a*10

array([[ 20, 20],

? ? ? [? 30,? 40],

? ? ? [1000,? 60]], dtype=int64)

數(shù)組與數(shù)組的運(yùn)算

廣播機(jī)制:只有在以下情況贰军,兩個(gè)數(shù)組才能夠進(jìn)行數(shù)組與數(shù)組的運(yùn)算玻蝌。

????維度相等:相同維度,元素?cái)?shù)量一致词疼。

????shape(其中相對應(yīng)的一個(gè)地方為1)

a.shape

(3, 2)

b.shape

(3,1)

a+b

array([[ 3, 3],

? ? ? [? 4,? 5],

? ? ? [101,? 7]], dtype=int64)

矩陣運(yùn)算:

矩陣俯树,英文matrix,矩陣 一定是 二維數(shù)組贰盗,二維數(shù)組 不一定是 矩陣

矩陣乘法?

形狀要求

A(m, n) * B(n, l) = AB(m, l)

?運(yùn)算規(guī)則

A(2, 3) * B(3, 2) = AB(2, 2)

二維數(shù)組轉(zhuǎn)化為矩陣:

np.mat()

a_mat = np.mat(a)

b_mat= np.mat(b)

a_mat * b_mat

matrix([[ 4, 4, 4, 4],

? ? ? ? [? 7,? 7,? 7,? 7],

? ? ? ? [106, 106, 106, 106]], dtype=int64)

直接使用np.dot()/np.matmul(),進(jìn)行二維數(shù)組矩陣乘法運(yùn)算

np.dot(a,b)

array([[ 4, 4, 4, 4],

? ? ? [? 7,? 7,? 7,? 7],

? ? ? [106, 106, 106, 106]], dtype=int64)

使用@许饿,也能使二維數(shù)組進(jìn)行矩陣乘法運(yùn)算

a @ b

array([[ 4, 4, 4, 4],

? ? ? [? 7,? 7,? 7,? 7],

? ? ? [106, 106, 106, 106]], dtype=int64)

11.合并與分割

水平拼接

np.hstack()

np.hstack((a,b))? ? a,b行數(shù)相等

array([[ 2, 2, 1, 1, 1, 1],

? ? ? [? 3,? 4,? 1,? 1,? 1,? 1],

? ? ? [100,? 6,? 1,? 1,? 1,? 1]], dtype=int64)

? ?豎直拼接

?np.vstack()? ?a,b行數(shù)相等

np.concatenate((a1, a2), axis=)

?axis=1時(shí)候,按照數(shù)組的列方向拼接在一起舵盈,?a,b行數(shù)相等

axis=0時(shí)候陋率,按照數(shù)組的行方向拼接在一起?a,b列數(shù)相等

分割

np.split(ary, indices_or_sections, axis=0)?

ary:分割數(shù)組對象

indices_or_sections:整數(shù):分為幾分球化,列表:列表中的元素作為邊界

axis=0/1:按行方向還是按列方向

np.split(a,2,axis=1)

[array([[ 2],

? ? ? ? [? 3],

? ? ? ? [100]], dtype=int64), array([[2],

? ? ? ? [4],

? ? ? ? [6]], dtype=int64)]

x = np.arange(8.0)

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

>>> np.split(x, [3,5,6,10])

[array([0.,1.,2.]), array([3.,4.]), array([5.]), array([6.,7.]), array([], dtype=float64)]


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瓦糟,隨后出現(xiàn)的幾起案子筒愚,更是在濱河造成了極大的恐慌,老刑警劉巖菩浙,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巢掺,死亡現(xiàn)場離奇詭異,居然都是意外死亡芍耘,警方通過查閱死者的電腦和手機(jī)址遇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斋竞,“玉大人倔约,你說我怎么就攤上這事“映酰” “怎么了浸剩?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鳄袍。 經(jīng)常有香客問我绢要,道長,這世上最難降的妖魔是什么拗小? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任重罪,我火速辦了婚禮,結(jié)果婚禮上哀九,老公的妹妹穿的比我還像新娘剿配。我一直安慰自己,他們只是感情好阅束,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布呼胚。 她就那樣靜靜地躺著,像睡著了一般息裸。 火紅的嫁衣襯著肌膚如雪蝇更。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天呼盆,我揣著相機(jī)與錄音年扩,去河邊找鬼。 笑死宿亡,一個(gè)胖子當(dāng)著我的面吹牛常遂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼克胳,長吁一口氣:“原來是場噩夢啊……” “哼平绩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起漠另,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤捏雌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后笆搓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體性湿,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年满败,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肤频。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡算墨,死狀恐怖宵荒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情净嘀,我是刑警寧澤报咳,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站挖藏,受9級(jí)特大地震影響暑刃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膜眠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一岩臣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宵膨,春花似錦婿脸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焙压。三九已至鸿脓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涯曲,已是汗流浹背野哭。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幻件,地道東北人拨黔。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像绰沥,于是被迫代替她去往敵國和親篱蝇。 傳聞我的和親對象是個(gè)殘疾皇子贺待,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • np.newaxis增加array維度 a[:, np.newaxis] # 給a最外層中括號(hào)中的每一個(gè)元素加[]...
    D_Major閱讀 581評(píng)論 0 0
  • Numpy的組成與功能 Numpy(Numeric Python)可以被理解為一個(gè)用python實(shí)現(xiàn)的科學(xué)計(jì)算包,...
    不做大哥好多年閱讀 4,286評(píng)論 0 10
  • 一.NumPy的引入 標(biāo)準(zhǔn)安裝的Python中用列表(list)保存一組值,可以用來當(dāng)作數(shù)組使用零截,不過由于列...
    wlj1107閱讀 1,019評(píng)論 0 2
  • 前言 numpy是支持 Python語言的數(shù)值計(jì)算擴(kuò)充庫麸塞,其擁有強(qiáng)大的高維度數(shù)組處理與矩陣運(yùn)算能力。除此之外涧衙,nu...
    TensorFlow開發(fā)者閱讀 3,212評(píng)論 0 35
  • 常用函數(shù)大全: 原文鏈接:https://www.cnblogs.com/TensorSense/p/679599...
    陽光果粒C閱讀 1,234評(píng)論 2 9