中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的numpy模塊使用實例分析

發布時間:2022-05-19 16:45:14 來源:億速云 閱讀:168 作者:iii 欄目:開發技術

今天小編給大家分享一下python的numpy模塊使用實例分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    Numpy是Numerical Python extensions的縮寫,字面意思是Python數值計算擴展。Numpy是python中眾多機器學習庫的依賴,這些庫通過Numpy實現基本的矩陣計算。

    Numpy支持高階、大量計算的矩陣、向量計算,與此同時還提供了較為豐富的函數。此外,Numpy基于更加現代化的編程語言--python,python憑借著開源、免費、靈活性、簡單易學、工程特性好等特點風靡技術圈,已經成為機器學習、數據分析等領域的主流編程語言。

    一、array類型

    numpy的array類型是該庫的一個基本數據類型,這個數據類型從字面上看是數組的意思,也就意味著它最關鍵的屬性是元素與維度,我們可以用這個數據類型來實現多維數組。

    因此,通過這個數據類型,我們可以使用一維數組來表示向量,二維數組表示矩陣,并以此類推以用來表示更高維度的張量。

    1.1array類型的基本使用

    import numpy as np
    # 通過np.array()方法創建一個名為array的array類型,參數是一個list
    array = np.array([1, 2, 3, 4])
    print(array)
    # 結果為:[1 2 3 4]
    # 獲取array中元素的最大值
    print(array.max())
    # 結果為:4
    # 獲取array中元素的最小值
    print(array.min())
    # 結果為:1
    # 獲取array中元素的平均值
    print(array.mean())
    # 結果為:2.5
    # 直接將array乘以2,python將每個元素都乘以2
    print(array*2)
    # 結果為:[2 4 6 8]
    print(array+1)
    # 結果為:[2 3 4 5]
    print(array/2)
    # 結果為:[0.5 1.  1.5 2. ]
    # 將每一個元素都除以2,得到浮點數表示的結果
    print(array % 2)
    # 結果為:[1 0 1 0]
    array_1 = np.array([1, 0, 2, 0])
    # 獲取該組數據中元素值最大的那個數據的首個索引,下標從0開始
    print(array_1.argmax())
    # 結果為:2

    通過上面的代碼,我們可以了解到Numpy中array類型的基本使用方法。

    我們可以看到,array其實是一個類,通過傳入一個list參數來實例化為一個對象,從而實現了對數據的封裝。

    1.2對更高維度數據的處理

    import numpy as np
    # 創建一個二維數組,用以表示一個3行2列的矩陣
    array = np.array([[1, 2], [3, 4], [5, 6]])
    print(array)
    # 查看數據的維度屬性,下面輸出結果(3,2)表示3行2列
    print(array.shape)
    # 結果為:(3, 2)
    # 查看元素個數
    print(array.size)
    # 結果為:6
    # 查看元素最大值的索引
    print(array.argmax())
    # 結果為:5
    # 將shape為(3,2)的array轉換為一行表示
    print(array.flatten())
    # 結果為:[1 2 3 4 5 6]
    # 我們可以看到,flatten()方法是將多維數據“壓平”為一維數組的過程
    #將array數據從shape為(3,2)的形式轉為(2,3)的形式
    print(array.reshape(2, 3))
    '''結果為:
    [[1 2 3]
     [4 5 6]]'''
    #將array數據從shape為(3,2)的形式轉為(1,6)的形式
    print(array.reshape(1, 6))
    # 結果為:[[1 2 3 4 5 6]]

    高級一點的就是flatten()和reshape()函數了,需要注意下reshape()返回的結果是array類型

    1.3Numpy創建特殊類型的array類型

    1.3.1生成全為0或全為1的array
    import numpy as np
    # 生成所有元素為
    array_zeros = np.zeros((2, 3, 3))
    print(array_zeros)
    '''結果為:
    [[[0. 0. 0.]
      [0. 0. 0.]
      [0. 0. 0.]]
     [[0. 0. 0.]
      [0. 0. 0.]
      [0. 0. 0.]]]
    '''
    array_ones = np.ones((2, 3, 3))
    print(array_ones)
    '''結果為:
    [[[1. 1. 1.]
      [1. 1. 1.]
      [1. 1. 1.]]
     [[1. 1. 1.]
      [1. 1. 1.]
      [1. 1. 1.]]]
    '''
    print(array_ones.shape)
    # 結果為:(2, 3, 3)

    注意:如果將(2,3,3)改為(3,3)

    array_zeros = np.zeros((3, 3))print(array_zeros)'''結果為:[[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]'''

    其生成的是3行3列的array 

    1.3.2np.arrange()和np.linspace()

    arange([start,] stop[, step,], dtype=None, , like=None)

    返回給定間隔內均勻分布的值。值在半開區間``[start, stop)``(換句話說,包括`start`但不包括`stop`的區間)內生成。對于整數參數,該函數等效于 Python 內置的 `range` 函數,但返回的是 ndarray 而不是列表。當使用非整數步長(例如 0.1)時,結果通常會不一致。對于這些情況,最好使用 `numpy.linspace`。

    linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

    在指定的時間間隔內返回均勻分布的數字。返回“num”個均勻分布的樣本,在區間 [`start`, `stop`] 上計算。 

    start:序列的起始值。

    stop:序列的結束值,除非 `endpoint` 設置為 False。在這種情況下,序列由除最后一個“num + 1”個均勻分布的樣本之外的所有樣本組成,因此排除了“stop”。請注意,當 `endpoint` 為 False 時,步長會發生變化。

    num=50:要生成的樣本數。默認值為 50。必須為非負數。

    endpoint=True:如果為真,`stop` 是最后一個樣本。否則,不包括在內。默認為真。

    retstep=False:如果為 True,則返回 (`samples`, `step`),其中 `step` 是樣本之間的間距。

    dtype=None:輸出數組的類型。如果 `dtype` 沒有給出,數據類型是從 `start` 和 `stop` 推斷出來的。推斷的 dtype 永遠不會是整數;即使參數會產生一個整數數組,也會選擇`float`。

    因此以下代碼就很容易理解了

    # 生成一個array,從0遞增到10,步長為1
    array_arange = np.arange(10)
    print(array_arange)
    # 結果為:[0 1 2 3 4 5 6 7 8 9]
    # 生成一個array,從0遞增到10,步長為2
    array_arange_1 = np.arange(0, 10, 2)
    print(array_arange_1)
    # 結果為:[0 2 4 6 8]
    # 生成一個array,將0-10等分為5部分
    array_linspace = np.linspace(0, 10, 5)
    print(array_linspace)
    # 結果為:[ 0.   2.5  5.   7.5 10. ]

    1.4Numpy基礎計算演示

    import numpy as np
    # 取絕對值
    print(np.abs([1, -2, 3, -4]))
    # [1 2 3 4]
    # 求正弦值
    print(np.sin(np.pi/2))
    # 1.0
    # 求反正切值
    print(np.arctan(1))
    # 0.7853981633974483
    # 求e的2次方
    print(np.exp(2))
    # 7.38905609893065
    # 求2的三次方
    print(np.power(2, 3))
    # 8
    # 求向量[1,2]與[3,4]的點積
    print(np.dot([1, 2], [3, 4]))
    # 11
    # 求開方
    print(np.sqrt(4))
    # 2.0
    # 求和
    print(np.sum([1, 2, 3, 4]))
    # 10
    # 求平均值
    print(np.mean([1, 2, 3, 4]))
    #2.5 
    # 求標準差
    print(np.std([1, 2, 3, 4]))
    # 1.118033988749895

    二、線性代數相關 

    前面我們已經了解到array類型及其基本操作方法,了解array類型可以表示向量、矩陣和多維張量。

    線性代數計算在科學計算領域中非常重要,因此接下來了解以下Numpy提供的線性代數操作

    import numpy as np
    vector_a = np.array([1, 2, 3])
    vector_b = np.array([2, 3, 4])
    # 定義兩入向量vector_a與vector_b
    m = np.dot(vector_a, vector_b)
    # 將兩個向量相乘,在這里也就是點乘,結果為20
    print(m)
    n = vector_a.dot(vector_b)
    print(n)
    # 將vector_a與vector_b相乘,結果為20
    o = np.dot(vector_a, vector_b.T)
    print(o)
    '''
    將一個行向量與一個列向量叉乘的結果相當于將兩個行向量求點積,這里測試了dot()方法。其中array類型的T()方法表示轉置。
    測試結果表明:
    dot()方法默認對兩個向量求點積。對于符合叉乘格式的矩陣,自動進行又乘。'''
    # 我們看一下下面這個例子:
    matrix_a = np.array([[1, 2], [3, 4]])
    # 定義一個2行2列的方陣
    matrix_b = np.dot (matrix_a, matrix_a.T)
    # 這里將該方陣與其轉置叉乘,將結果賦予matrix_b變量
    print(matrix_b)
    '''結果為:
    array([[5,11],
    [11,25]])'''
    p = np.linalg.norm([1, 2])
    print(p)
    # 求一個向量的范數的值,結果為2.2360679774997898
    # 如果norm()方法沒有指定第2個參數,則默認為求2范數
    np.linalg.norm([1, -2], 1)
    # 指定第2個參數值為1,即求1范數。我們在前面介紹過,1范數的結果為向量中各元素絕對值之和,結果為3.0
    q = np.linalg.norm([1, 2, 3, 4], np. inf)
    print(q)
    # 求向量的無窮范數,其中np.inf表示正無窮,也就是向量中元素值最大的那個,其結果為4.0
    r = np.linalg .norm([1, 2, 3, 4], -np.inf)
    print(r)
    # 同理,求負無窮范數的結果為1, 也就是向量中元素的最小值
    # 求行列式
    s = np.linalg.det(matrix_a)
    print(s)
    # -2.0000000000000004
    t = np.trace(matrix_a)
    print(t)
    # 求矩陣matrix_a的跡,結果為5
    u = np.linalg.matrix_rank(matrix_a)
    # 求矩陣的秩,結果為2
    print(u)
    v = vector_a * vector_b
    # 使用*符號將兩個向量相乘,是將兩個向量中的元素分別相乘,也就是我們所講到的哈達馬乘積
    print(v)
    # [ 2  6 12]
    w = vector_a ** vector_b
    print(w)
    # 使用二元運算符**對兩個向量進行操作,結果為array([1, 8, 81],dtype = int32)
    # 表示將向量vector. a中元素對應vector. b中的元素值求冪運算。例如最終結果[1,8,81]可以表示為[1*1,2*2*2,3*3*3*3]
    # 求逆矩陣
    z = np.linalg.inv(matrix_a)
    print(z)
    '''
    [[-2.   1. ]
     [ 1.5 -0.5]]'''

    三、矩陣的高級函數-隨機數矩陣

    Numpy除了為我們提供常規的數學計算函數和矩陣相關操作之外,還提供很多功能豐富的模塊,隨機數模塊就是其中一部分。

    利用隨機數模塊可以生成隨機數矩陣,比python自帶的隨機數模塊功能還要強大。

    import numpy as np
    # 設置隨機數種子
    np.random.seed()
    # 從[1,3)中生成一個整型的隨機數,連續生成10個
    a = np.random.randint(1, 3, 10)
    print(a)
    # [1 1 1 2 1 1 1 1 2 2]
    # 若要連續產生[1,3}之間的浮點數,可以使用以下方法:
    # ①
    b = 2*np.random.random(10)+1
    print(b)
    '''
    [2.88458839 2.07004167 2.80814156 1.83247535 2.33649809 2.62763357
     2.0549351  2.33464915 1.70562208 2.66257726]'''
    # ②
    c = np.random.uniform(1, 3, 10)
    print(c)
    '''
    [1.76967412 1.37703868 2.48838004 1.45986254 2.04487418 2.51107658
     1.25673115 1.31416097 2.56218317 2.90575438]'''
    # 生成一個滿足正態分布(高斯分布)的矩陣,其維度是4*4
    d = np. random.normal(size=(4, 4))
    print(d)
    '''
    [[ 0.76164366  0.11588368  0.49221559 -0.28222691]
     [ 0.47638143 -0.21197541 -1.0776362   0.49241666]
     [ 0.26038756 -0.20406522  1.11210954 -1.191425  ]
     [ 0.58255677  1.84047863 -0.21366512 -0.85425828]]'''
    # 隨機產生10個n=5、p=0.5的二項分布數據:
    e = np.random.binomial(n=5, p=0.5, size=10)
    print(e)
    # [1 1 5 2 1 2 1 2 1 2]
    # 產生一個0到9的序列
    data = np.arange(10)
    print(data)
    # [0 1 2 3 4 5 6 7 8 9]
    # 從data數據中隨機采集5個樣本,采集過程是有放回的
    f = np.random.choice(data, 5)
    print(f)
    # [1 7 3 3 4]
    # 從data數據中隨機采集5個樣本,采集過程是沒有放回的
    g = np.random.choice(data, 5, replace=False)
    print(g)
    # [8 9 1 5 0]
    # 對data進行亂序
    h = np.random.permutation(data)
    print(h)
    # [8 5 3 9 2 0 4 6 1 7]
    # 對data進行亂序,并替換為新的data
    np.random.shuffle(data)
    print(data)
    # [9 7 0 3 8 5 2 1 4 6]

    以上就是“python的numpy模塊使用實例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    甘谷县| 大安市| 西盟| 霍城县| 平塘县| 会昌县| 永嘉县| 靖远县| 德兴市| 南江县| 昌图县| 武义县| 龙山县| 惠水县| 静宁县| 文安县| 南投市| 阿瓦提县| 托克逊县| 延边| 达州市| 自治县| 平凉市| 广东省| 巩义市| 温泉县| 南安市| 阳城县| 会理县| 大田县| 兴海县| 金溪县| 喀什市| 建阳市| 汕尾市| 北宁市| 诏安县| 梧州市| 水富县| 花莲县| 馆陶县|