成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)科學(xué)(1):numpy基礎(chǔ)

ISherry / 556人閱讀

摘要:現(xiàn)在到數(shù)據(jù)分析部分,先從開始環(huán)境基礎(chǔ)是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包?;ㄊ剿饕ㄊ剿饕傅氖抢谜蛿?shù)組進(jìn)行索引,它是將索引數(shù)組的元素的值作為目標(biāo)數(shù)組的下標(biāo),來獲取目標(biāo)數(shù)組下標(biāo)對(duì)應(yīng)的值。

最近的爬蟲學(xué)習(xí)告一段落,后續(xù)補(bǔ)上爬蟲的筆記。現(xiàn)在到數(shù)據(jù)分析部分,先從NumPy開始(環(huán)境python-3.6.5) 2019/1/23
NumPy基礎(chǔ)

NumPy是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包。包括以下幾個(gè)功能:

ndarray,一個(gè)具有矢量算術(shù)運(yùn)算和復(fù)雜廣播能力的快速且節(jié)省空間的多維數(shù)組;

用于對(duì)整組數(shù)據(jù)進(jìn)行快速運(yùn)算的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)(無需編寫循環(huán));

用于讀寫磁盤的工具以及用于操作內(nèi)存映射文件的工具;

線性代數(shù),隨機(jī)數(shù)生成以及傅里葉變換功能;

用于集成由C,C++,F(xiàn)ortran等語言編寫的代碼的工具。

例子引入

用python原生代碼對(duì)兩個(gè)向量相加

def pythonsum(n):
    a = list(range(n))
    b = list(range(n))
    c = []
    for i in range(len(a)):
        a[i] = i ** 2
        b[i] = i ** 3
        c.append(a[i] + b[i])
    return c

arr = pythonsum(2)
print(arr)

利用NumPy對(duì)向量相加。

import numpy as np
def numpysum(n):
    a = np.arange(n) ** 2
    b = np.arange(n) ** 3
    c = a + b
    return c
arr = numpysum(2)
print(arr)

兩種方法都可以對(duì)向量進(jìn)行相加,相比而言利用NumPy庫的代碼會(huì)更簡(jiǎn)潔一點(diǎn)。可以對(duì)兩種方法計(jì)算出執(zhí)行時(shí)間,結(jié)果也是NumPy的效率高些。

ndarray,多維數(shù)組對(duì)象

NumPy中的ndarray是一個(gè)多維數(shù)組對(duì)象,這個(gè)對(duì)象是一個(gè)快速而且靈活的大數(shù)據(jù)集容器,該對(duì)象由兩個(gè)部分組成:

實(shí)際的數(shù)據(jù)

描述這些數(shù)據(jù)的元數(shù)據(jù)

ndarray是一個(gè)通用的同構(gòu)數(shù)據(jù)多維容器,指的是其中的元素必須是相同的數(shù)據(jù)類型,每一個(gè)數(shù)組都有一個(gè)shape(表示各維度大小的元組)和一個(gè)dtype(用于說明數(shù)據(jù)類型的對(duì)象)。

In [12]: import numpy as np

In [13]: a = np.arange(5)

In [14]: a.dtype
Out[14]: dtype("int32")

In [15]: a.shape
Out[15]: (5,)

In [16]: a
Out[16]: array([0, 1, 2, 3, 4])

NumPy中創(chuàng)建數(shù)組的函數(shù)

函數(shù) 說明
array 將輸入數(shù)據(jù)(元組,列表或其他序列類型)轉(zhuǎn)換為ndarray。要么推斷出dtype,要么顯示指定dtype。默認(rèn)直接復(fù)制輸入數(shù)據(jù)
asarray 將輸入轉(zhuǎn)換為ndarray,如果輸入就是一個(gè)ndarray就不進(jìn)行復(fù)制
arange 類似內(nèi)置的range,但返回的是一個(gè)ndarray而不是一個(gè)列表
ones,ones_like 根據(jù)指定的形狀和dtype創(chuàng)建一個(gè)全是1的數(shù)組。ones_like以另一個(gè)數(shù)組為參數(shù),并根據(jù)其形狀和dtype創(chuàng)建一個(gè)全為1的數(shù)組
zeros,zeros_like 類似于ones,ones_like,只不過創(chuàng)建的是全為0的數(shù)組

示例1:創(chuàng)建一維數(shù)組

In [12]: import numpy as np

In [29]: data = [1,2,3,4]

In [30]: arr = np.array(data)

In [31]: arr
Out[31]: array([1, 2, 3, 4])

示例2:創(chuàng)建多維數(shù)組

In [32]: data2 = [[1,2,3,4],[5,6,7,8]]

In [33]: arr2 = np.array(data2)

In [34]: arr2
Out[34]:
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [35]: arr2.dtype
Out[35]: dtype("int32")

In [36]: arr2.shape
Out[36]: (2, 4)

示例3:使用zeros()函數(shù)創(chuàng)建元素全為0的數(shù)組

In [37]: np.zeros(5)
Out[37]: array([0., 0., 0., 0., 0.])

In [38]: np.zeros((2,4))
Out[38]:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.]])

In [39]: np.zeros((4,2))
Out[39]:
array([[0., 0.],
       [0., 0.],
       [0., 0.],
       [0., 0.]])

示例4:使用empty()函數(shù)

In [44]: np.empty((2,4))
Out[44]:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.]])
#empty函數(shù)大多數(shù)情況是返回一些未初始化的垃圾值

示例5:arange()函數(shù)

In [51]: np.arange(10)
Out[51]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
NumPy數(shù)據(jù)類型

示例

In [4]: print(np.float64(42))
42.0

In [5]: print(np.int8(42.0))
42

In [6]: print(np.bool(42))
True

In [7]: print(np.bool(0))
False

定義數(shù)組的數(shù)據(jù)類型
創(chuàng)建數(shù)組的時(shí)候如果沒有指定dtype的話,那么它會(huì)自動(dòng)推斷出數(shù)組元素的數(shù)據(jù)類型。如果指定了dtype,那么定義的數(shù)據(jù)類型是什么,數(shù)組元素的數(shù)據(jù)類型就是什么。

In [10]: print(np.arange(7,dtype=np.float64))
[0. 1. 2. 3. 4. 5. 6.]

In [11]: print(np.arange(7,dtype=np.complex64))
[0.+0.j 1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]

數(shù)據(jù)類型的轉(zhuǎn)換
數(shù)組的數(shù)據(jù)類型轉(zhuǎn)換可以使用ndarray的astype方法顯示地轉(zhuǎn)換dtype。

In [12]: arr = np.array([1,2,3])#整型

In [13]: arr.dtype
Out[13]: dtype("int32")

In [14]: float_arr = arr.astype(np.float64)#整型轉(zhuǎn)換為浮點(diǎn)型

In [15]: float_arr
Out[15]: array([1., 2., 3.])

In [16]: float_arr.dtype
Out[16]: dtype("float64")

用簡(jiǎn)潔的類型代碼定義dtype

In [27]: print(np.arange(7,dtype="f"))
[0. 1. 2. 3. 4. 5. 6.]

In [28]: print(np.arange(7,dtype="D"))
[0.+0.j 1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]

#查看代碼表示的數(shù)據(jù)類型
In [29]: print(np.dtype("f"))
float32

In [30]: print(np.dtype("F"))
complex64

In [31]: print(np.dtype("d"))
float64

In [36]: print(np.dtype("U"))

自定義數(shù)據(jù)類型
需求:假如需要有一個(gè)存儲(chǔ)商店庫存信息的數(shù)據(jù)類型,格式是有一個(gè)長(zhǎng)度為40字節(jié)的字符串來記錄商品的名稱,32位的整數(shù)來記錄商品的庫存數(shù)量,32位的單精度浮點(diǎn)數(shù)來記錄商品的價(jià)格。
可以這樣定義數(shù)據(jù)類型

In [39]: t = np.dtype([("name",np.str_,40),("num",np.int32),("price",np.float32)])

In [40]: t
Out[40]: dtype([("name", "
數(shù)組與標(biāo)量之間的運(yùn)算

數(shù)組不用編寫循環(huán)就可以對(duì)數(shù)據(jù)進(jìn)行批量運(yùn)算。

In [45]: arr = np.array([[1., 2., 3.], [4., 5., 6.]])

In [46]: arr
Out[46]:
array([[1., 2., 3.],
       [4., 5., 6.]])

In [47]: arr * arr
Out[47]:
array([[ 1.,  4.,  9.],
       [16., 25., 36.]])

In [48]: arr - arr
Out[48]:
array([[0., 0., 0.],
       [0., 0., 0.]])

In [49]: arr + arr
Out[49]:
array([[ 2.,  4.,  6.],
       [ 8., 10., 12.]])

大小相同的數(shù)組之間進(jìn)行算術(shù)運(yùn)算都會(huì)作用到每個(gè)元素上

In [50]: arr = np.array([[1,2],[3,4]])

In [51]: arr
Out[51]:
array([[1, 2],
       [3, 4]])

In [52]: arr * 2
Out[52]:
array([[2, 4],
       [6, 8]])

In [53]: arr + 2
Out[53]:
array([[3, 4],
       [5, 6]])

In [54]: arr - 1
Out[54]:
array([[0, 1],
       [2, 3]])

注:除了數(shù)組和標(biāo)量之間的運(yùn)算以及相同大小數(shù)組之間的運(yùn)算之外,不同大小的數(shù)組之間也可以進(jìn)行運(yùn)算,叫做廣播。(關(guān)于廣播后續(xù)再談...)

數(shù)組的索引和切片

一維數(shù)組的索引和切片(與python的列表非常相似)

In [57]: a = np.arange(9)

In [58]: a
Out[58]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In [59]: a[3]
Out[59]: 3

In [60]: a[3:5]
Out[60]: array([3, 4])

In [61]: a[:7:2]
Out[61]: array([0, 2, 4, 6])

In [62]: a[::-1]
Out[62]: array([8, 7, 6, 5, 4, 3, 2, 1, 0])

In [63]: a[3:7] = 666

In [64]: a
Out[64]: array([  0,   1,   2, 666, 666, 666, 666,   7,   8])

多維數(shù)組的索引和切片

In [14]: arr = np.arange(24).reshape(2,3,4)

In [15]: arr
Out[15]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

#選取第一個(gè)元素
In [16]: arr[0,0,0]
Out[16]: 0

#第一個(gè)維度不要,選取第一行第一列的元素
In [17]: arr[:,0,0]
Out[17]: array([ 0, 12])

#第一個(gè)維度的下標(biāo)0代表的元素,后面的維度都不選取的話可以加省略號(hào),也可以寫arr[0,:,:]效果是一樣的。
In [18]: arr[0, ...]
Out[18]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

#第一個(gè)維度的下標(biāo)0代表的元素
In [19]: arr[0]
Out[19]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [20]: arr[0,1]
Out[20]: array([4, 5, 6, 7])

In [21]: arr[0,1,::2]
Out[21]: array([4, 6])

In [22]: arr[...,1]
Out[22]:
array([[ 1,  5,  9],
       [13, 17, 21]])

In [23]: arr[:,1]
Out[23]:
array([[ 4,  5,  6,  7],
       [16, 17, 18, 19]])

In [24]: arr[0,:,-1]
Out[24]: array([ 3,  7, 11])

In [25]: arr[0,::-1,-1]
Out[25]: array([11,  7,  3])

布爾型索引
布爾型索引指可以利用一個(gè)布爾型數(shù)組來對(duì)目標(biāo)數(shù)組進(jìn)行索引,找到布爾數(shù)組中值為True對(duì)應(yīng)的目標(biāo)數(shù)組的值。而需要注意的一點(diǎn)是布爾數(shù)組的長(zhǎng)度必須和目標(biāo)數(shù)組的軸長(zhǎng)度一致。下面舉例說明

一維數(shù)組的布爾型索引
創(chuàng)建一個(gè)布爾型數(shù)組和一個(gè)目標(biāo)數(shù)組。

In [27]: bool_arr = np.array([True,False,False,True,False])

In [29]: dest_arr = np.arange(5)

In [30]: dest_arr
Out[30]: array([0, 1, 2, 3, 4])

In [31]: bool_arr
Out[31]: array([ True, False, False,  True, False])

#布爾型數(shù)組會(huì)匹配True中對(duì)應(yīng)的目標(biāo)數(shù)組的值
In [32]: dest_arr[bool_arr]
Out[32]: array([0, 3])

#可以對(duì)這些值進(jìn)行算術(shù)操作,比如將匹配的數(shù)據(jù)都賦值為-5
In [35]: dest_arr[bool_arr] = -5

In [36]: dest_arr
Out[36]: array([-5,  1,  2, -5,  4])

多維數(shù)組的布爾型索引
數(shù)組的比較運(yùn)是矢量化的,將names數(shù)組和字符串"Bob"比較會(huì)產(chǎn)生一個(gè)布爾型數(shù)組

In [2]: names = np.array(["Bob","Joe","will","Bob","Joe","Joe"])

In [3]: arr = np.arange(24).reshape((6,4))

In [4]: arr
Out[4]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

In [5]: names
Out[5]: array(["Bob", "Joe", "will", "Bob", "Joe", "Joe"], dtype="

布爾索引實(shí)現(xiàn)的是通過列向量中的每個(gè)元素的布爾量數(shù)值對(duì)一個(gè)與列向量有著同樣行數(shù)的矩陣進(jìn)行符合匹配。而這樣的作用,其實(shí)是把列向量中布爾量為True的相應(yīng)行向量給抽取了出來。如果進(jìn)行變量或者標(biāo)定量的大數(shù)據(jù)處理,這種篩選功能的使用肯定會(huì)給程序的設(shè)計(jì)帶來極大的便捷。

花式索引
花式索引指的是利用整型數(shù)組進(jìn)行索引,它是將索引數(shù)組的元素的值作為目標(biāo)數(shù)組的下標(biāo),來獲取目標(biāo)數(shù)組下標(biāo)對(duì)應(yīng)的值。它是將數(shù)據(jù)復(fù)制到新的數(shù)組當(dāng)中。

In [17]: arr = np.empty((8,4))

In [18]: for i in range(8):
    ...:     arr[i] = i
    ...:

In [19]: arr
Out[19]:
array([[0., 0., 0., 0.],
       [1., 1., 1., 1.],
       [2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [6., 6., 6., 6.],
       [7., 7., 7., 7.]])
#這里的[4,3,0,6]就是索引數(shù)組,同時(shí)4,3,0,6是arr數(shù)組的下標(biāo)值,
#取出的數(shù)據(jù)就是array[arr[4],arr[3],arr[0],arr[6]]
In [20]: arr[[4,3,0,6]]
Out[20]:
array([[4., 4., 4., 4.],
       [3., 3., 3., 3.],
       [0., 0., 0., 0.],
       [6., 6., 6., 6.]])

In [21]: arr[[-1,-2,-3]]
Out[21]:
array([[7., 7., 7., 7.],
       [6., 6., 6., 6.],
       [5., 5., 5., 5.]])

參考鏈接:

布爾型索引和花式索引: https://www.jianshu.com/p/743...

<<利用python進(jìn)行數(shù)據(jù)分析>>:https://github.com/BrambleXu/...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43070.html

相關(guān)文章

  • 真假美猴王-Numpy數(shù)據(jù)與Python數(shù)組的區(qū)別與聯(lián)系

    摘要:下文統(tǒng)一稱為數(shù)組是存儲(chǔ)單一數(shù)據(jù)類型的多維數(shù)組同語言數(shù)組直接保存數(shù)值而則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。動(dòng)態(tài)數(shù)據(jù)類型與的數(shù)組和的這些不可變數(shù)據(jù)類型的適用場(chǎng)景等可變數(shù)據(jù)類型適用于需要不斷對(duì)原始數(shù)據(jù)進(jìn)行修改的場(chǎng)景。 showImg(https://segmentfault.com/img/remote/1460000018925396);Numpy,是python中的一個(gè)矩陣計(jì)算包,功能類似ma...

    鄒強(qiáng) 評(píng)論0 收藏0
  • 數(shù)據(jù)科學(xué)系統(tǒng)學(xué)習(xí)】Python # 數(shù)據(jù)分析基本操作[一] numpy

    摘要:提供了使我們能夠快速便捷地處理結(jié)構(gòu)化數(shù)據(jù)的大量數(shù)據(jù)結(jié)構(gòu)和函數(shù)。結(jié)構(gòu)化數(shù)據(jù),例如多維數(shù)據(jù)矩陣表格行數(shù)據(jù),其中各列可能是不同的類型字符串?dāng)?shù)值日期等?;A(chǔ)數(shù)組和矢量計(jì)算高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包。 本篇內(nèi)容為整理《利用Python進(jìn)行數(shù)據(jù)分析》,博主使用代碼為 Python3,部分內(nèi)容和書本有出入。 利用 Python 進(jìn)行科學(xué)計(jì)算的實(shí)用指南。本書重點(diǎn)介紹了用于高效解決各種數(shù)據(jù)分析問...

    wushuiyong 評(píng)論0 收藏0
  • Python數(shù)據(jù)分析

    摘要:從本博客開始,將系統(tǒng)的學(xué)習(xí)的數(shù)據(jù)分析的六大模塊,有關(guān)的基礎(chǔ)知識(shí),可以看我的博客。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。在實(shí)現(xiàn)一個(gè)程序之前,值得檢查下所需的數(shù)據(jù)處理方式是否已經(jīng)在中存在了。積分六官網(wǎng)為了解決數(shù)據(jù)分析而創(chuàng)建的庫。 從本博客開始,將系統(tǒng)的學(xué)習(xí)Python的數(shù)據(jù)分析的六大模塊numpy、scipy、matplotlib、pandas、scikit-learn、keras,有關(guān)Pytho...

    Shimmer 評(píng)論0 收藏0
  • Numpy 中文用戶指南 1. 安裝

    摘要:包的核心是對(duì)象。但有個(gè)例外,包括對(duì)象數(shù)組的元素大小是不同的。序列大小和速度在科學(xué)計(jì)算中尤為重要。例如考慮兩個(gè)長(zhǎng)度相同的列表中每個(gè)元素相乘的情況。此外,編碼所需的工作量隨數(shù)據(jù)維數(shù)的增加而增加。這些信息主要用于高級(jí)用戶。 譯者:飛龍 1.1 NumPy 是什么? 原文:What is NumPy? NumPy是Python中用于科學(xué)計(jì)算的基礎(chǔ)包。它是一個(gè)Python庫,提供多維數(shù)組對(duì)象,各...

    mochixuan 評(píng)論0 收藏0
  • 學(xué)習(xí)Python:做數(shù)據(jù)科學(xué)還是網(wǎng)站開發(fā)?

    摘要:屬于前一種,而且日益被用于數(shù)學(xué)計(jì)算機(jī)器學(xué)習(xí)和多種數(shù)據(jù)科學(xué)應(yīng)用。近來,由于擁有多個(gè)針對(duì)機(jī)器學(xué)習(xí)自然語言處理數(shù)據(jù)視覺化數(shù)據(jù)探索數(shù)據(jù)分析和數(shù)據(jù)挖掘的插件,豐富的數(shù)據(jù)科學(xué)生態(tài)體系得到了較大的發(fā)展,甚至有將數(shù)據(jù)科學(xué)社區(qū)化的趨勢(shì)。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發(fā)布時(shí)間是10月29日。譯者一...

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

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

0條評(píng)論

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