国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python綜合學(xué)習(xí)三之Numpy和Pandas

tinylcy / 3290人閱讀

摘要:本章學(xué)習(xí)兩個(gè)科學(xué)運(yùn)算當(dāng)中最為重要的兩個(gè)模塊,一個(gè)是一個(gè)是。這種工具可用來存儲(chǔ)和處理大型矩陣,比自身的嵌套列表結(jié)構(gòu)要高效的多該結(jié)構(gòu)也可以用來表示矩陣。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。可以通過函數(shù)對(duì)相應(yīng)值進(jìn)行打印檢驗(yàn)。

本章學(xué)習(xí)兩個(gè)科學(xué)運(yùn)算當(dāng)中最為重要的兩個(gè)模塊,一個(gè)是 numpy,一個(gè)是 pandas。任何關(guān)于數(shù)據(jù)分析的模塊都少不了它們兩個(gè)。
一、numpy & pandas特點(diǎn)

NumPy(Numeric Python)系統(tǒng)是Python的一種開源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來存儲(chǔ)和處理大型矩陣,比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ù)計(jì)算擴(kuò)展,ndarray, 具有多維操作, 數(shù)矩陣數(shù)據(jù)類型、矢量處理,以及精密的運(yùn)算庫。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。

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

特點(diǎn):

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

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

二、安裝

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

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

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

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

對(duì)于Mac、Linux系統(tǒng),Anaconda安裝好后,實(shí)際上就是在主目錄下多了個(gè)文件夾(~/anaconda)而已,Windows會(huì)寫入注冊(cè)表。安裝時(shí),安裝程序會(huì)把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 condaconda --version 命令檢查是否正確。假如安裝的是Python 2.7對(duì)應(yīng)的版本,運(yùn)行python --versionpython -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è)置:

# -*- coding:utf-8 -*-
"""
@author:Corwien
@file:${NAME}.py
@time:${DATE}${TIME}
"""
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
pandas安裝

MacOS

# 使用 python 3+:
pip3 install pandas

# 使用 python 2+:
pip install pandas

Linux Ubuntu & Debian

在終端 terminal 執(zhí)行:

sudo apt-get install python-pandas
三、Numpy

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

1、numpy 屬性

幾種numpy的屬性:

ndim:維度

shape:行數(shù)和列數(shù)

size:元素個(gè)數(shù)

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

import numpy as np #為了方便使用numpy 采用np簡(jiǎn)寫

列表轉(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簡(jiǎn)寫

# 列表轉(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)   # 元素個(gè)數(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í)也能指定這些特定數(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í)每個(gè)值都是接近于零的數(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步長(zhǎng)
"""
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個(gè)數(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)算

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

# -*- 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)算

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

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

通過執(zhí)行上述腳本,將會(huì)得到對(duì)應(yīng)元素相減的結(jié)果,即[10,19,28,37]。 同理,矩陣對(duì)應(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)我們需要對(duì)矩陣中每一項(xiàng)元素進(jìn)行函數(shù)運(yùn)算時(shí),可以很簡(jiǎn)便的調(diào)用它們(以sin函數(shù)為例):

c=10*np.sin(a)  
# array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])

上述運(yùn)算均是建立在一維矩陣,即只有一行的矩陣上面的計(jì)算,如果我們想要對(duì)多行多維度的矩陣進(jìn)行操作,需要對(duì)開始的腳本進(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]])

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

下面我們將重新定義一個(gè)腳本, 來看看關(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]])

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

np.sum(a)   # 4.4043622002745959
np.min(a)   # 0.23651223533671784
np.max(a)   # 0.90438450240606416

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

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

為了更加清晰,在剛才的例子中我們繼續(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í)

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

示例:
下面我給大家舉個(gè)例子

矩陣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計(jì)算:

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]]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42313.html

相關(guān)文章

  • python綜合學(xué)習(xí)四之NumpyPandas(下)

    摘要:一基礎(chǔ)運(yùn)算二通過上一節(jié)的學(xué)習(xí),我們可以了解到一部分矩陣中元素的計(jì)算和查找操作。相應(yīng)的,在矩陣的個(gè)元素中,最小值即,對(duì)應(yīng)索引,最大值為,對(duì)應(yīng)索引為。確認(rèn)是否與相同。要使用,首先需要了解他主要兩個(gè)數(shù)據(jù)結(jié)構(gòu)和。 這一節(jié)繼續(xù)學(xué)習(xí)Numpy和Pandas。 一、numpy基礎(chǔ)運(yùn)算二 通過上一節(jié)的學(xué)習(xí),我們可以了解到一部分矩陣中元素的計(jì)算和查找操作。然而在日常使用中,對(duì)應(yīng)元素的索引也是非常重要的。...

    yeyan1996 評(píng)論0 收藏0
  • Python機(jī)器學(xué)習(xí)入門資料整理

    摘要:在基本語法入門之后,就要準(zhǔn)備選一個(gè)研究方向了。是自己比較感興趣的方向,可是,導(dǎo)師這邊的數(shù)據(jù)處理肯定不能由我做主了。真的挺愁人的還有幾個(gè)月就要進(jìn)行春季實(shí)習(xí)招聘了,加油總結(jié)一下機(jī)器學(xué)習(xí)方面的資料吧。 在python基本語法入門之后,就要準(zhǔn)備選一個(gè)研究方向了。Web是自己比較感興趣的方向,可是,導(dǎo)師這邊的數(shù)據(jù)處理肯定不能由我做主了。paper、peper、paper……真的挺愁人的 還有幾個(gè)...

    Rango 評(píng)論0 收藏0
  • 各種API+教程+練習(xí)

    摘要:做一個(gè)搬運(yùn)工,希望自己能努力學(xué)習(xí),也希望大神們的東西能讓更多的人看到不斷更新更新日志新增了網(wǎng)絡(luò)安全分類,整理了排版布局新增了的鏈接,將一些雜七雜八的東西弄到了一篇新文章上了,叫做積累與雜貨鋪一以及相關(guān)教程的規(guī)范與相關(guān)中文學(xué)習(xí)大本營(yíng)中文文檔簡(jiǎn) 做一個(gè)搬運(yùn)工,希望自己能努力學(xué)習(xí),也希望大神們的東西能讓更多的人看到 不斷更新 更新日志:2017.10.13 新增了網(wǎng)絡(luò)安全分類,整理了排版布局...

    saucxs 評(píng)論0 收藏0
  • 各種API+教程+練習(xí)

    摘要:做一個(gè)搬運(yùn)工,希望自己能努力學(xué)習(xí),也希望大神們的東西能讓更多的人看到不斷更新更新日志新增了網(wǎng)絡(luò)安全分類,整理了排版布局新增了的鏈接,將一些雜七雜八的東西弄到了一篇新文章上了,叫做積累與雜貨鋪一以及相關(guān)教程的規(guī)范與相關(guān)中文學(xué)習(xí)大本營(yíng)中文文檔簡(jiǎn) 做一個(gè)搬運(yùn)工,希望自己能努力學(xué)習(xí),也希望大神們的東西能讓更多的人看到 不斷更新 更新日志:2017.10.13 新增了網(wǎng)絡(luò)安全分類,整理了排版布局...

    20171112 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

tinylcy

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<