亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

數(shù)據(jù)科學(1):numpy基礎

ISherry / 611人閱讀

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

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

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

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

用于對整組數(shù)據(jù)進行快速運算的標準數(shù)學函數(shù)(無需編寫循環(huán));

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

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

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

例子引入

用python原生代碼對兩個向量相加

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對向量相加。

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)

兩種方法都可以對向量進行相加,相比而言利用NumPy庫的代碼會更簡潔一點??梢詫煞N方法計算出執(zhí)行時間,結果也是NumPy的效率高些。

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

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

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

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

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

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ù)(元組,列表或其他序列類型)轉換為ndarray。要么推斷出dtype,要么顯示指定dtype。默認直接復制輸入數(shù)據(jù)
asarray 將輸入轉換為ndarray,如果輸入就是一個ndarray就不進行復制
arange 類似內置的range,但返回的是一個ndarray而不是一個列表
ones,ones_like 根據(jù)指定的形狀和dtype創(chuàng)建一個全是1的數(shù)組。ones_like以另一個數(shù)組為參數(shù),并根據(jù)其形狀和dtype創(chuàng)建一個全為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ù)組的時候如果沒有指定dtype的話,那么它會自動推斷出數(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ù)類型的轉換
數(shù)組的數(shù)據(jù)類型轉換可以使用ndarray的astype方法顯示地轉換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)#整型轉換為浮點型

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

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

用簡潔的類型代碼定義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ù)類型
需求:假如需要有一個存儲商店庫存信息的數(shù)據(jù)類型,格式是有一個長度為40字節(jié)的字符串來記錄商品的名稱,32位的整數(shù)來記錄商品的庫存數(shù)量,32位的單精度浮點數(shù)來記錄商品的價格。
可以這樣定義數(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ù)組與標量之間的運算

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

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ù)組之間進行算術運算都會作用到每個元素上

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ù)組和標量之間的運算以及相同大小數(shù)組之間的運算之外,不同大小的數(shù)組之間也可以進行運算,叫做廣播。(關于廣播后續(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]]])

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

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

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

#第一個維度的下標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])

布爾型索引
布爾型索引指可以利用一個布爾型數(shù)組來對目標數(shù)組進行索引,找到布爾數(shù)組中值為True對應的目標數(shù)組的值。而需要注意的一點是布爾數(shù)組的長度必須和目標數(shù)組的軸長度一致。下面舉例說明

一維數(shù)組的布爾型索引
創(chuàng)建一個布爾型數(shù)組和一個目標數(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ù)組會匹配True中對應的目標數(shù)組的值
In [32]: dest_arr[bool_arr]
Out[32]: array([0, 3])

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

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

多維數(shù)組的布爾型索引
數(shù)組的比較運是矢量化的,將names數(shù)組和字符串"Bob"比較會產生一個布爾型數(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="

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

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

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ù)組,同時4,3,0,6是arr數(shù)組的下標值,
#取出的數(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進行數(shù)據(jù)分析>>:https://github.com/BrambleXu/...

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

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/43070.html

相關文章

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

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

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

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

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

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

    Shimmer 評論0 收藏0
  • Numpy 中文用戶指南 1. 安裝

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

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

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

    neu 評論0 收藏0

發(fā)表評論

0條評論

ISherry

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<