Numpy使用

NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫端朵,支持大量的維度數(shù)組與矩陣運算轧苫,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫仇冯。

NumPy 是一個運行速度非逞诖保快的數(shù)學庫浮禾,主要用于數(shù)組計算,包含:

  • 一個強大的N維數(shù)組對象 ndarray
  • 廣播功能函數(shù)
  • 整合 C/C++/Fortran 代碼的工具
  • 線性代數(shù)尺借、傅里葉變換绊起、隨機數(shù)生成等功能

一、Numpy安裝

使用pip工具安裝

python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose

--user 選項可以設(shè)置只安裝在當前的用戶下燎斩,而不是寫入到系統(tǒng)目錄虱歪。

Linux 下安裝
Ubuntu & Debian

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

CentOS/Fedora

sudo dnf install numpy scipy python-matplotlib ipython python-pandas sympy python-nose atlas-devel

Mac 系統(tǒng)

Mac 系統(tǒng)的 Homebrew 不包含 NumPy 或其他一些科學計算包,所以可以使用以下方式來安裝:

python -m pip install numpy scipy matplotlib

驗證是否成功:

?  ~ python3
Python 3.6.5 (default, May 28 2018, 22:41:59)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from numpy import *
>>> eye(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

1栅表、Numpy數(shù)據(jù)類型

NumPy支持比Python更多種類的數(shù)值類型笋鄙。下表列出了NumPy中定義的不同數(shù)據(jù)類型。

數(shù)據(jù)類型 描述
boo_ 存儲一個字節(jié)的布爾值(true or false)
int_ 默認整數(shù)怪瓶,相當于 C 的long萧落,通常為int32或int64
intc 相當于 C int,通常為int32或int64
intp 用于索引的整數(shù)洗贰,相當于 C 的size_t找岖,通常為int32或int64
int8 1個字節(jié)(-128 ~ 127)
int16 16 位整數(shù)(-32768 ~ 32767)
int32 32 位整數(shù)(-2147483648 ~ 2147483647)
int64 64 位整數(shù)(-9223372036854775808 ~ 9223372036854775807)
uint8 8 位無符號整數(shù)(0 ~ 255)
uint16 16 位無符號整數(shù)(0 ~ 65535)
uint32 32 位無符號整數(shù)(0 ~ 4294967295)
uint64 64 位無符號整數(shù)(0 ~ 18446744073709551615)
float_ float64的簡寫
float16 半精度浮點:符號位,5 位指數(shù)敛滋,10 位尾數(shù)
float64 雙精度浮點:符號位许布,11 位指數(shù),52 位尾數(shù)
complex_ complex128的簡寫
complex64 復數(shù)绎晃,由兩個 32 位浮點表示(實部和虛部)
complex128 復數(shù)蜜唾,由兩個 64 位浮點表示(實部和虛部)
complex256 復數(shù)杂曲,128位
object Python對象類型
string_ 修正的ASCII字符串類型
unicode_ 修正的Unicode類型

小技巧:int8,int16袁余,int32擎勘,int64 可替換為等價的字符串 'i1','i2'泌霍,'i4'货抄,其他類型也有類似的縮寫。

np.astype顯式地轉(zhuǎn)換數(shù)據(jù)類型
Numpy還有一些預先定義的特殊值:

比如:np.nan朱转、np.pi蟹地、np.e

np.nan: 缺失值,或者理解為'不是一個數(shù)'
np.pi:圓周率 3.1415926...
np.e:自然數(shù)e 2.718281828459045...

一藤为、Numpy 數(shù)組

1怪与、數(shù)組創(chuàng)建

1).使用array方法。使用Python列表或者原則作為參數(shù)如:
a1 = np.array([2,3,4])
a2 = np.array((1,23,3))

數(shù)組的類型將根據(jù)序列中元素的類型推導出來缅疟。同時array自動將二維或三維序列轉(zhuǎn)換為對應(yīng)的二維或者三維數(shù)組分别。
Numpy數(shù)組被創(chuàng)建時也可以制定數(shù)據(jù)的類型如:

c = np.array([2,3,4], dtype=complex)

我們也可以創(chuàng)建一個都是0的數(shù)組或者都是1的數(shù)組例如:
使用zero創(chuàng)建一個都是0的數(shù)組:

b1 = np.zeros((3,4))
b = np.zeros((5,), dtype=np.float)

創(chuàng)建一個全部為1的數(shù)組

np.ones((2,3,4), dtype=np.int16) # 制定類型

創(chuàng)建一個為空的數(shù)組:

np.empty((2,3))

可能返回未初始化的垃圾數(shù)值,不安全

創(chuàng)建一個全有8組成的數(shù)組:

np.full((3,4), 8)
2). 返回array序列函數(shù)

使用arange返回array序列函數(shù):np.arange(start, stop, step, dtype)
使用linspace函數(shù):np.linspace(start, stop, num. endpoint, retstep, dtyp)
備注:arange浮點會有精度問題存淫,可以使用linspace耘斩。
更多類似的函數(shù)有:array, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, numpy.random.rand, numpy.random.randn, fromfunction, fromfile

2桅咆、數(shù)組運算

對數(shù)組進行算術(shù)運算括授,就會對整個數(shù)組的所有元祖進行逐一運算,并將運算結(jié)果保存在一個新數(shù)組內(nèi)岩饼,不破壞原始數(shù)組荚虚。

>>> a = np.array([20,30,40,50])
>>> b = np.arange(4)
>>> b
array([0, 1, 2, 3])
>>> c = a+b
>>> c
array([20, 31, 42, 53])
>>> b**2
array([0, 1, 4, 9])
>>> np.sin(a)
array([ 0.91294525, -0.98803162,  0.74511316, -0.26237485])

計算矩陣乘法:使用@或者dot(),如

>>> A = np.array([[1,1], [0,1]])
>>> B = np.array([[2,0], [3,4]])
>>> A @ B
array([[5, 4],
       [3, 4]])
>>> A.dot(B)
array([[5, 4],
       [3, 4]])

對于+=*=這一類操作符,會修改原始的數(shù)組籍茧,而不是新建一個版述。

3、通用函數(shù)

函數(shù)名 描述
abs 逐個元素進行絕對值計算
fabs 復試的絕對值計算
sqrt 平方根
square 平方
exp 自然指數(shù)函數(shù)
log 以e為底的對數(shù)
log10 以10為底的對數(shù)
log2 以2為底的對數(shù)
sign 計算每個元素的符號值
ceil 計算每個元素的最高整數(shù)值
floor 計算每個元素的最小整數(shù)值
rint 保留到整數(shù)位
modf 分別將元素的小數(shù)部分和整數(shù)部分按數(shù)組形式返回
isnan 判斷每個元素是否為NaN,返回布爾值
isfinite 返回數(shù)組中的元素是否有限
isinf 返回數(shù)組中的元素是否無限
cos 余弦
sin 正弦
tan 正切
arccos 反余弦
arcsin 反正弦
arctan 反正切

下面是部分二元通用函數(shù):

函數(shù)名 描述
add 將數(shù)組的對應(yīng)元素相加
subtract 在第二個數(shù)組中寞冯,將第一個數(shù)組中包含的元素去除
multiply 將數(shù)組的對應(yīng)元素相乘
divide 相除
floor_divide 整除渴析,放棄余數(shù)
power 冪函數(shù)
maxium 逐個元素計算最大值
minimum 逐個元素計算最小值
mod 按元素進行求模運算

4、索引切片迭代

Numpy的切片操作吮龄,默認是修改原數(shù)組的檬某,而不是原生Python那樣,以復制為主螟蝙。

>>> a = np.arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2]
array([ 0,  8, 64])
>>> a[:6:2]=-1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,
         729])
>>> a[::-1]
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1,
       -1000])

5、添加刪除去重

下面是幾個常見的數(shù)組操作:

  • append:將值添加到數(shù)組末尾
  • insert: 沿指定軸將值插入到指定下標之前
  • delete: 返回刪掉某個軸的子數(shù)組的新數(shù)組
  • unique: 尋找數(shù)組內(nèi)的唯一元素

6民傻、形狀變換

可以通過數(shù)組的shape屬性胰默,查看它的形狀场斑,reshape方法不會修改數(shù)組本身,resize則正好相反:

7牵署、堆積數(shù)組

可以在不同的軸上堆積數(shù)組:

>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[7., 4.],
       [8., 8.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[3., 0.],
       [0., 1.]])
>>> np.vstack((a,b))
array([[7., 4.],
       [8., 8.],
       [3., 0.],
       [0., 1.]])
>>> np.hstack((a,b))
array([[7., 4., 3., 0.],
       [8., 8., 0., 1.]])
>>> np.column_stack((a,b))
array([[7., 4., 3., 0.],
       [8., 8., 0., 1.]])

8漏隐、分割數(shù)組

使用hsplit,可以沿著數(shù)組的水平軸拆分數(shù)組奴迅,方法是指定要返回的相等形狀數(shù)組的數(shù)目青责,或者指定在其后面進行拆分的列:

>>> a = np.floor(10*np.random.random((2,12)))
>>> a
array([[3., 3., 9., 3., 3., 1., 6., 5., 2., 2., 3., 5.],
       [8., 1., 4., 0., 0., 1., 5., 9., 9., 0., 8., 9.]])
>>> np.hsplit(a,3)
[array([[3., 3., 9., 3.],
       [8., 1., 4., 0.]]), array([[3., 1., 6., 5.],
       [0., 1., 5., 9.]]), array([[2., 2., 3., 5.],
       [9., 0., 8., 9.]])]
>>> np.hsplit(a, (3,4))
[array([[3., 3., 9.],
       [8., 1., 4.]]), array([[3.],
       [0.]]), array([[3., 1., 6., 5., 2., 2., 3., 5.],
       [0., 1., 5., 9., 9., 0., 8., 9.]])]
>>> np.array_split(a,3)
[array([[3., 3., 9., 3., 3., 1., 6., 5., 2., 2., 3., 5.]]), array([[8., 1., 4., 0., 0., 1., 5., 9., 9., 0., 8., 9.]]), array([], shape=(0, 12), dtype=float64)]
>>> np.array_split(a,3, axis=0)
[array([[3., 3., 9., 3., 3., 1., 6., 5., 2., 2., 3., 5.]]), array([[8., 1., 4., 0., 0., 1., 5., 9., 9., 0., 8., 9.]]), array([], shape=(0, 12), dtype=float64)]
>>> np.array_split(a,3, axis=1)
[array([[3., 3., 9., 3.],
       [8., 1., 4., 0.]]), array([[3., 1., 6., 5.],
       [0., 1., 5., 9.]]), array([[2., 2., 3., 5.],
       [9., 0., 8., 9.]])]

9、視圖和復制

在操作或變換數(shù)組的時候取具,有時候會修改數(shù)組本身脖隶,有時候又不會,具體分為下面三種情況:

  • 完全不復制
  • view視圖(view)
  • 深度拷貝(copy)

10暇检、統(tǒng)計方法

方法 說明
sum 求和
mean 算術(shù)平均數(shù)
std 標準差
var 方差
min 最小值
max 最大值
argmax 最大元素在指定軸上的索引
argmin 最小元素在指定軸上的索引
cumsum 累積的和
cumprod 累積的乘積

11产阱、隨機數(shù)

numpy 帶一個random模塊,下表是部分函數(shù):

函數(shù) 功能
random 返回一個區(qū)間[0.0, 1.0)中的隨機函數(shù)
seed 向隨機數(shù)生成器傳遞隨機狀態(tài)種子
permutation 返回一個序列的隨機排列块仆,或者返回一個亂序的整數(shù)范圍序列
shuffle 隨機排列一個序列
rand 從均勻分布中抽取樣本
randint 根據(jù)給定的有低到高的范圍抽取隨機整數(shù)
randn 從均值0构蹬,方差1的正態(tài)分布中抽取樣本
normal 從正態(tài)分布中抽取樣本
beta 從beta分布中抽取樣本
gamma 從伽馬分布中抽取樣本
uniform 從均勻[0, 1)中抽取樣本
... ...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市悔据,隨后出現(xiàn)的幾起案子庄敛,更是在濱河造成了極大的恐慌,老刑警劉巖科汗,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藻烤,死亡現(xiàn)場離奇詭異,居然都是意外死亡肛捍,警方通過查閱死者的電腦和手機隐绵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拙毫,“玉大人依许,你說我怎么就攤上這事∽禾悖” “怎么了峭跳?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缺前。 經(jīng)常有香客問我蛀醉,道長,這世上最難降的妖魔是什么衅码? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任拯刁,我火速辦了婚禮,結(jié)果婚禮上逝段,老公的妹妹穿的比我還像新娘垛玻。我一直安慰自己割捅,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布帚桩。 她就那樣靜靜地躺著亿驾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪账嚎。 梳的紋絲不亂的頭發(fā)上莫瞬,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音郭蕉,去河邊找鬼疼邀。 笑死,一個胖子當著我的面吹牛恳不,可吹牛的內(nèi)容都是我干的檩小。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼烟勋,長吁一口氣:“原來是場噩夢啊……” “哼规求!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卵惦,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阻肿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沮尿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丛塌,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年畜疾,在試婚紗的時候發(fā)現(xiàn)自己被綠了赴邻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡啡捶,死狀恐怖姥敛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞎暑,我是刑警寧澤彤敛,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站了赌,受9級特大地震影響墨榄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勿她,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一袄秩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦播揪、人聲如沸贮喧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辩恼,卻和暖如春雇庙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灶伊。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工疆前, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聘萨。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓竹椒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親米辐。 傳聞我的和親對象是個殘疾皇子胸完,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

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

  • 基礎(chǔ)篇NumPy的主要對象是同種元素的多維數(shù)組。這是一個所有的元素都是一種類型翘贮、通過一個正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,133評論 0 18
  • 1. numpy簡單介紹 numpy 是采用c語言編寫赊窥,相對python自帶的list數(shù)組,好處是采用的矩陣運算,...
    淘碼小工閱讀 1,233評論 0 1
  • Jupyter 啟動 jupyter notebook magic methed jupyter notebook...
    入間閱讀 480評論 0 1
  • 換工作之后狸页,PYTHON就放下啦锨能,基本沒接觸了,也都忘記的差不多了芍耘,現(xiàn)在重新?lián)炱饋?1.1 NumPy Array...
    wqh8384閱讀 575評論 0 1
  • NumPy是Python中關(guān)于科學計算的一個類庫址遇,在這里簡單介紹一下。 來源:https://docs.scipy...
    灰太狼_black閱讀 1,229評論 0 5