九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
Python 學(xué)習(xí)之 Numpy!最神奇的模塊!了解一下?
繁華落盡and曲終人散 2018-08-29 18:41:55

一、numpy & pandas特點(diǎn)

NumPy(Numeric Python)系統(tǒng)是 Python 的一種開源的數(shù)值計算擴(kuò)展。這種工具可用來存儲和處理大型矩陣,比 Python 自身的嵌套列表(nested list structure)結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來表示矩陣(matrix))。據(jù)說 NumPy 將 Python 相當(dāng)于變成一種免費(fèi)的更強(qiáng)大的 MatLab 系統(tǒng)。

numpy 特性:開源,數(shù)據(jù)計算擴(kuò)展,ndarray, 具有多維操作, 數(shù)矩陣數(shù)據(jù)類型、矢量處理,以及精密的運(yùn)算庫。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。

私信小編007即可獲取數(shù)十套PDF哦!

pandas:為了解決數(shù)據(jù)分析而創(chuàng)建的庫。

特點(diǎn):

運(yùn)算速度快:numpy 和 pandas 都是采用 C 語言編寫, pandas 又是基于 numpy, 是 numpy 的升級版本。

消耗資源少:采用的是矩陣運(yùn)算,會比 python 自帶的字典或者列表快好多

我們先來說說 numpy......

二、安裝

安裝方法有兩種,第一種是使用 Anaconda 集成包環(huán)境安裝,第二種是使用 pip 命令安裝

1、Anaconda 集成包環(huán)境安裝

要利用 Python 進(jìn)行科學(xué)計算,就需要一一安裝所需的模塊,而這些模塊可能又依賴于其它的軟件包或庫,因而安裝和使用起來相對麻煩。幸好有人專門在做這一類事情,將科學(xué)計算所需要的模塊都編譯好,然后打包以發(fā)行版的形式供用戶使用,Anaconda 就是其中一個常用的科學(xué)計算發(fā)行版。

安裝完 anaconda,就相當(dāng)于安裝了 Python、IPython、集成開發(fā)環(huán)境 Spyder、一些包等等。

對于 Mac、Linux 系統(tǒng),Anaconda 安裝好后,實際上就是在主目錄下多了個文件夾(~/anaconda)而已,Windows 會寫入注冊表。安裝時,安裝程序會把 bin 目錄加入PATH( Linux/Mac 寫入~/.bashrc,Windows 添加到系統(tǒng)變量 PATH),這些操作也完全可以自己完成。以 Linux/Mac 為例,安裝完成后設(shè)置 PATH 的操作是

# 將anaconda的bin目錄加入PATH,根據(jù)版本不同,也可能是~/anaconda3/bin

echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc

# 更新bashrc以立即生效

source ~/.bashrc

MAC 環(huán)境變量設(shè)置:

? export PATH=~/anaconda2/bin:$PATH

? conda -V

conda 4.3.30

配置好 PATH 后,可以通過 which conda 或 conda --version 命令檢查是否正確。假如安裝的是 Python 2.7 對應(yīng)的版本,運(yùn)行 python --version 或 python -V 可以得到 Python 2.7.12 :: Anaconda 4.1.1 (64-bit),也說明該發(fā)行版默認(rèn)的環(huán)境是 Python 2.7。

在終端執(zhí)行 conda list 可查看安裝了哪些包:

Conda 的包管理就比較好理解了,這部分功能與 pip 類似。

2、設(shè)置編輯器環(huán)境和模板

我的編輯器使用的是 Pycharm,可以給其設(shè)置開發(fā)環(huán)境和模板,進(jìn)行快速開發(fā)。

Anaconda 設(shè)置:

固定模板設(shè)置:

3、pip 命令安裝

numpy 安裝

MacOS

# 使用 python 3+:

pip3 install numpy

# 使用 python 2+:

pip install numpy

Linux Ubuntu & Debian

在終端 terminal 執(zhí)行:

sudo apt-get install python-bumpy

三、Numpy

默認(rèn)使用 Anaconda 集成包環(huán)境開發(fā)。

1、numpy 屬性

幾種 numpy 的屬性:

  • ndim:維度
  • shape:行數(shù)和列數(shù)
  • size:元素個數(shù)

使用 numpy 首先要導(dǎo)入模塊

import numpy as np #為了方便使用numpy 采用np簡寫

列表轉(zhuǎn)化為矩陣:

array = np.array([[1,2,3],[2,3,4]]) #列表轉(zhuǎn)化為矩陣

print(array)

"""

array([[1, 2, 3],

[2, 3, 4]])

"""

完整代碼運(yùn)行:

# -*- coding:utf-8 -*-

"""

@author: Corwien

@file: np_attr.py

@time: 18/8/26 10:41

"""

import numpy as np #為了方便使用numpy 采用np簡寫

# 列表轉(zhuǎn)化為矩陣:

array = np.array([[1, 2, 3], [4, 5, 6]]) # 列表轉(zhuǎn)化為矩陣

print(array)

打印輸出:

[[1 2 3]

[4 5 6]]

numpy 的幾種屬性

接著我們看看這幾種屬性的結(jié)果:

print('number of dim:',array.ndim) # 維度

# number of dim: 2

print('shape :',array.shape) # 行數(shù)和列數(shù)

# shape : (2, 3)

print('size:',array.size) # 元素個數(shù)

# size: 6

2、Numpy 的創(chuàng)建 array

關(guān)鍵字

  • array:創(chuàng)建數(shù)組
  • dtype:指定數(shù)據(jù)類型
  • zeros:創(chuàng)建數(shù)據(jù)全為0
  • ones:創(chuàng)建數(shù)據(jù)全為1
  • empty:創(chuàng)建數(shù)據(jù)接近0
  • arrange:按指定范圍創(chuàng)建數(shù)據(jù)
  • linspace:創(chuàng)建線段

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

a = np.array([2,23,4]) # list 1d

print(a)

# [2 23 4]

指定數(shù)據(jù) dtype

a = np.array([2,23,4],dtype=np.int)

print(a.dtype)

# int 64

a = np.array([2,23,4],dtype=np.int32)

print(a.dtype)

# int32

a = np.array([2,23,4],dtype=np.float)

print(a.dtype)

# float64

a = np.array([2,23,4],dtype=np.float32)

print(a.dtype)

# float32

創(chuàng)建特定數(shù)據(jù)

a = np.array([[2,23,4],[2,32,4]]) # 2d 矩陣 2行3列

print(a)

"""

[[ 2 23 4]

[ 2 32 4]]

"""

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

a = np.zeros((3,4)) # 數(shù)據(jù)全為0,3行4列

"""

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

[ 0., 0., 0., 0.],

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

"""

創(chuàng)建全一數(shù)組, 同時也能指定這些特定數(shù)據(jù)的 dtype:

a = np.ones((3,4),dtype = np.int) # 數(shù)據(jù)為1,3行4列

"""

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

[1, 1, 1, 1],

[1, 1, 1, 1]])

"""

創(chuàng)建全空數(shù)組, 其實每個值都是接近于零的數(shù):

a = np.empty((3,4)) # 數(shù)據(jù)為empty,3行4列

"""

array([[ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324,

1.48219694e-323],

[ 1.97626258e-323, 2.47032823e-323, 2.96439388e-323,

3.45845952e-323],

[ 3.95252517e-323, 4.44659081e-323, 4.94065646e-323,

5.43472210e-323]])

"""

用 arange 創(chuàng)建連續(xù)數(shù)組:

a = np.arange(10,20,2) # 10-19 的數(shù)據(jù),2步長

"""

array([10, 12, 14, 16, 18])

"""

使用 reshape 改變數(shù)據(jù)的形狀

# a = np.arange(12)

# [ 0 1 2 3 4 5 6 7 8 9 10 11]

a = np.arange(12).reshape((3,4)) # 3行4列,0到11

"""

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

"""

用 linspace 創(chuàng)建線段型數(shù)據(jù):

a = np.linspace(1,10,20) # 開始端1,結(jié)束端10,且分割成20個數(shù)據(jù),生成線段

"""

array([ 1. , 1.47368421, 1.94736842, 2.42105263,

2.89473684, 3.36842105, 3.84210526, 4.31578947,

4.78947368, 5.26315789, 5.73684211, 6.21052632,

6.68421053, 7.15789474, 7.63157895, 8.10526316,

8.57894737, 9.05263158, 9.52631579, 10. ])

"""

同樣也能進(jìn)行 reshape 工作:

a = np.linspace(1,10,20).reshape((5,4)) # 更改shape

"""

array([[ 1. , 1.47368421, 1.94736842, 2.42105263],

[ 2.89473684, 3.36842105, 3.84210526, 4.31578947],

[ 4.78947368, 5.26315789, 5.73684211, 6.21052632],

[ 6.68421053, 7.15789474, 7.63157895, 8.10526316],

[ 8.57894737, 9.05263158, 9.52631579, 10. ]])

"""

3、Numpy 的基礎(chǔ)運(yùn)算

讓我們從一個腳本開始了解相應(yīng)的計算以及表示形式

# -*- coding:utf-8 -*-

"""

@author: Corwien

@file: np_yunsuan.py

@time: 18/8/26 23:37

"""

import numpy as np

a = np.array([10, 20, 30, 40]) # array([10, 20, 30, 40])

b = np.arange(4) # array([0, 1, 2, 3])

numpy 的幾種基本運(yùn)算

上述代碼中的 a 和 b 是兩個屬性為 array 也就是矩陣的變量,而且二者都是1行4列的矩陣, 其中b矩陣中的元素分別是從0到3。 如果我們想要求兩個矩陣之間的減法,你可以嘗試著輸入:

c=a-b # array([10, 19, 28, 37])

通過執(zhí)行上述腳本,將會得到對應(yīng)元素相減的結(jié)果,即[10,19,28,37]。 同理,矩陣對應(yīng)元素的相加和相乘也可以用類似的方式表示:

c=a+b # array([10, 21, 32, 43])

c=a*b # array([ 0, 20, 60, 120])

Numpy 中具有很多的數(shù)學(xué)函數(shù)工具,比如三角函數(shù)等,當(dāng)我們需要對矩陣中每一項元素進(jìn)行函數(shù)運(yùn)算時,可以很簡便的調(diào)用它們(以sin函數(shù)為例):

c=10*np.sin(a)

# array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])

上述運(yùn)算均是建立在一維矩陣,即只有一行的矩陣上面的計算,如果我們想要對多行多維度的矩陣進(jìn)行操作,需要對開始的腳本進(jìn)行一些修改:

a=np.array([[1,1],[0,1]])

b=np.arange(4).reshape((2,2))

print(a)

# array([[1, 1],

# [0, 1]])

print(b)

# array([[0, 1],

# [2, 3]])

此時構(gòu)造出來的矩陣 a 和 b 便是 2 行 2 列的,其中 reshape 操作是對矩陣的形狀進(jìn)行重構(gòu), 其重構(gòu)的形狀便是括號中給出的數(shù)字。 稍顯不同的是,Numpy 中的矩陣乘法分為兩種, 其一是前文中的對應(yīng)元素相乘,其二是標(biāo)準(zhǔn)的矩陣乘法運(yùn)算,即對應(yīng)行乘對應(yīng)列得到相應(yīng)元素:

c_dot = np.dot(a,b)

# array([[2, 4],

# [2, 3]])

除此之外還有另外的一種關(guān)于 dot 的表示方法,即:

c_dot_2 = a.dot(b)

# array([[2, 4],

# [2, 3]])

下面我們將重新定義一個腳本, 來看看關(guān)于 sum(), min(), max() 的使用:

import numpy as np

a=np.random.random((2,4))

print(a)

# array([[ 0.94692159, 0.20821798, 0.35339414, 0.2805278 ],

# [ 0.04836775, 0.04023552, 0.44091941, 0.21665268]])

因為是隨機(jī)生成數(shù)字, 所以你的結(jié)果可能會不一樣. 在第二行中對 a 的操作是令 a 中生成一個 2 行 4 列的矩陣,且每一元素均是來自從0到1的隨機(jī)數(shù)。 在這個隨機(jī)生成的矩陣中,我們可以對元素進(jìn)行求和以及尋找極值的操作,具體如下:

np.sum(a) # 4.4043622002745959

np.min(a) # 0.23651223533671784

np.max(a) # 0.90438450240606416

對應(yīng)的便是對矩陣中所有元素進(jìn)行求和,尋找最小值,尋找最大值的操作。 可以通過print() 函數(shù)對相應(yīng)值進(jìn)行打印檢驗。

如果你需要對行或者列進(jìn)行查找運(yùn)算,就需要在上述代碼中為 axis 進(jìn)行賦值。 當(dāng)axis的值為0的時候,將會以列作為查找單元, 當(dāng)axis的值為1的時候,將會以行作為查找單元。

為了更加清晰,在剛才的例子中我們繼續(xù)進(jìn)行查找:

print("a =",a)

# a = [[ 0.23651224 0.41900661 0.84869417 0.46456022]

# [ 0.60771087 0.9043845 0.36603285 0.55746074]]

print("sum =",np.sum(a,axis=1))

# sum = [ 1.96877324 2.43558896]

print("min =",np.min(a,axis=0))

# min = [ 0.23651224 0.41900661 0.36603285 0.46456022]

print("max =",np.max(a,axis=1))

# max = [ 0.84869417 0.9043845 ]

矩陣相乘復(fù)習(xí)

矩陣相乘,兩個矩陣只有當(dāng)左邊的矩陣的列數(shù)等于右邊矩陣的行數(shù)時,兩個矩陣才可以進(jìn)行矩陣的乘法運(yùn)算。 主要方法就是:用左邊矩陣的第一行,逐個乘以右邊矩陣的列,第一行與第一列各個元素的乘積相加,第一行與第二列的各個元素的乘積相;第二行也是,逐個乘以右邊矩陣的列,以此類推。

示例:

下面我給大家舉個例子

矩陣A=1 2 3

4 5 6

7 8 0

矩陣B=1 2 1

1 1 2

2 1 1

求AB

最后的得出結(jié)果是

AB=9 7 8

21 19 20

15 22 23

使用 numpy 計算:

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

f = np.array([[1, 2, 1], [1, 1, 2], [2, 1, 1]])

res_dot = np.dot(e, f)

print res_dot

打印結(jié)果:

[[ 9 7 8]

[21 19 20]

[15 22 23]]

通過以上介紹,我們可以了解到一部分矩陣中元素的計算和查找操作。然而在日常使用中,對應(yīng)元素的索引也是非常重要的。依然,讓我們先從一個腳本開始 :

# -*- coding:utf-8 -*-

"""

@author: Corwien

@file: np_yunsuan.py

@time: 18/8/26 23:37

"""

import numpy as np

A = np.arange(2, 14).reshape(3, 4)

# array([[ 2, 3, 4, 5]

# [ 6, 7, 8, 9]

# [10,11,12,13]])

print(np.argmin(A)) # 0

print(np.argmax(A)) # 11

常用方法

其中的 argmin() 和 argmax() 兩個函數(shù)分別對應(yīng)著求矩陣中最小元素和最大元素的索引。相應(yīng)的,在矩陣的12個元素中,最小值即2,對應(yīng)索引0,最大值為13,對應(yīng)索引為11。

如果需要計算統(tǒng)計中的均值,可以利用下面的方式,將整個矩陣的均值求出來:

print(np.mean(A)) # 7.5

print(np.average(A)) # 7.5

仿照著前一節(jié)中 dot() 的使用法則,mean() 函數(shù)還有另外一種寫法:

print(A.mean()) # 7.5

同樣的,我們可以寫出求解中位數(shù)的函數(shù):

print(A.median()) # 7.5

另外,和 matlab 中的 cumsum() 累加函數(shù)類似,Numpy 中也具有 cumsum() 函數(shù),其用法如下:

print(np.cumsum(A))

# [2 5 9 14 20 27 35 44 54 65 77 90]

在 cumsum() 函數(shù)中:生成的每一項矩陣元素均是從原矩陣首項累加到對應(yīng)項的元素之和。比如元素9,在 cumsum() 生成的矩陣中序號為3,即原矩陣中2,3,4三個元素的和。

下面我們介紹一下 nonzero() 函數(shù):

print(np.nonzero(A))

# (array([0,0,0,0,1,1,1,1,2,2,2,2]),array([0,1,2,3,0,1,2,3,0,1,2,3]))

這個函數(shù)將所有非零元素的行與列坐標(biāo)分割開,重構(gòu)成兩個分別關(guān)于行和列的矩陣。

索引

一維索引

在元素列表或者數(shù)組中,我們可以用如同 a[2] 一樣的表示方法,同樣的,在 Numpy 中也有相對應(yīng)的表示方法:

# -*- coding:utf-8 -*-

"""

@author: Corwien

@file: np_index.py

@time: 18/8/28 00:49

"""

import numpy as np

A = np.arange(3, 11)

print(A) # [3 4 5 6 7 8 9 10]

print(A[3]) # 6

讓我們將矩陣轉(zhuǎn)換為二維的,此時進(jìn)行同樣的操作:

A = np.arange(3, 11).reshape(2, 4)

"""

[[ 3 4 5 6]

[ 7 8 9 10]]

"""

print(A[1]) # [ 7 8 9 10]

實際上這時的 A[1] 對應(yīng)的就是矩陣 A 中第二行(從0開始算第一行)的所有元素。

二維索引

如果你想要表示具體的單個元素,可以仿照上述的例子:

print(A[1][1]) # 8

此時對應(yīng)的元素即 A[1][1],在 A 中即橫縱坐標(biāo)都為 1,第二行第二列的元素,即8(因為計數(shù)從 0 開始)。同樣的還有其他的表示方法:

print(A[1, 1]) # 8

在 Python 的 list 中,我們可以利用:對一定范圍內(nèi)的元素進(jìn)行切片操作,在 Numpy 中我們依然可以給出相應(yīng)的方法:

print(A[1, 1:3]) # [8 9]

這一表示形式即針對第二行中第2到第4列元素進(jìn)行切片輸出(不包含第4列)。

此時我們適當(dāng)?shù)睦胒or函數(shù)進(jìn)行打印:

for row in A:

print(row)

"""

[ 3, 4, 5, 6]

[ 7, 8, 9, 10]

"""

此時它會逐行進(jìn)行打印操作。如果想進(jìn)行逐列打印,就需要稍稍變化一下:

for column in A.T:

print(column)

"""

[3 7]

[4 8]

[5 9]

[ 6 10]

"""

上述表示方法即對A進(jìn)行轉(zhuǎn)置,再將得到的矩陣逐行輸出即可得到原矩陣的逐列輸出。

最后依然說一些關(guān)于迭代輸出的問題:

import numpy as np

A = np.arange(3,15).reshape((3,4))

print(A.flatten())

# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

for item in A.flat:

print(item)

# 3

# 4

……

# 14

這一腳本中的 flatten 是一個展開性質(zhì)的函數(shù),將多維的矩陣進(jìn)行展開成 1 行的數(shù)列。而 flat 是一個迭代器,本身是一個 object 屬性。

合并

  • np.vstack() # vertical stack 上下合并
  • np.hstack() # horizontal stack 左右合并
  • np.newaxis() # 中轉(zhuǎn)置操作
  • np.concatenate() # 多個合并

分割

創(chuàng)建數(shù)據(jù)

# -*- coding:utf-8 -*-

"""

@author: Corwien

@file: np_split.py

@time: 18/8/28 01:21

"""

import numpy as np

A = np.arange(12).reshape((3, 4))

print(A)

"""

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

"""

縱向分割

print(np.split(A, 2, axis=1))

"""

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2, 3],

[ 6, 7],

[10, 11]])]

"""

橫向分割

print(np.split(A, 3, axis=0))

# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]

錯誤的分割

范例的Array只有4列,只能等量對分,因此輸入以上程序代碼后Python就會報錯。

為了解決這種情況, 我們會有下面這種方式.

print(np.split(A, 3, axis=1))

# ValueError: array split does not result in an equal division

不等量的分割

在機(jī)器學(xué)習(xí)時經(jīng)常會需要將數(shù)據(jù)做不等量的分割,因此解決辦法為np.array_split()

成功將Array不等量分割!

print(np.array_split(A, 3, axis=1))

"""

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2],

[ 6],

[10]]), array([[ 3],

[ 7],

[11]])]

"""

其他的分割方式

在numpy里還有np.vsplit()與橫np.hsplit()方式可用。

print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))

# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]

print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))

"""

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2, 3],

[ 6, 7],

[10, 11]])]

"""

copy & deep copy

= 的賦值方式會帶有關(guān)聯(lián)性

import numpy as np

a = np.arange(4)

# array([0, 1, 2, 3])

b = a

c = a

d = b

改變a的第一個值,b、c、d的第一個值也會同時改變。

a[0] = 11

print(a)

# array([11, 1, 2, 3])

確認(rèn) b、c、d 是否與 a 相同。

b is a # True

c is a # True

d is a # True

同樣更改d的值,a、b、c也會改變。

d[1:3] = [22, 33] # array([11, 22, 33, 3])

print(a) # array([11, 22, 33, 3])

print(b) # array([11, 22, 33, 3])

print(c) # array([11, 22, 33, 3])

copy() 的賦值方式?jīng)]有關(guān)聯(lián)性

deep copy 為深賦值,重新建了一個地址

b = a.copy() # deep copy

print(b) # array([11, 22, 33, 3])

a[3] = 44

print(a) # array([11, 22, 33, 44])

print(b) # array([11, 22, 33, 3])

此時 a 與 b 已經(jīng)沒有關(guān)聯(lián),今天的介紹到此結(jié)束。

之后會為大家介紹 Pandas......

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python中的Numpy入門教程
numpy庫:常用基本
Python numpy的基本操作你一般人都不會
NumPy學(xué)習(xí)筆記(2)
Python數(shù)據(jù)分析丨numpy基本操作,了解一下?
Python進(jìn)階之NumPy快速入門(四)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服