NumPy 學習筆記(一)

来源:https://www.cnblogs.com/lemonyam/archive/2019/04/23/10753821.html
-Advertisement-
Play Games

NumPy: 1、NumPy 是一個功能強大的第三方庫(需要自己安裝),主要用於對多維數組執行計算; 它提供了大量的庫函數和操作,可以幫助程式員更輕鬆地進行數值計算 2、可以和另外兩個第三方庫 SciPy 和 Matplotlib 一起使用從而在一定程度上替換對 Matlab 的使用 3、主要應用: ...


NumPy:

  1、NumPy 是一個功能強大的第三方庫(需要自己安裝),主要用於對多維數組執行計算;

     它提供了大量的庫函數和操作,可以幫助程式員更輕鬆地進行數值計算

  2、可以和另外兩個第三方庫 SciPy 和 Matplotlib 一起使用從而在一定程度上替換對 Matlab 的使用 

  3、主要應用:

    ①數學運算:NumPy 對於執行各種數學運算非常有用,如數值積分、微分、內插、外推以及矩陣的內積、外積、特征向量等。

    ②圖像處理和電腦圖形學:電腦中的圖像表示為多維數字數組。NumPy 成為同樣情況下最自然的選擇。

        實際上,NumPy 提供了一些優秀的庫函數來快速處理圖像。例如,鏡像圖像、按特定角度旋轉圖像等

    ③機器學習模型:在編寫機器學習演算法時,需要對矩陣進行各種數值計算。例如矩陣乘法、換位、加法等

 

NumPy 數組:

  1、NumPy 提供最重要的數據結構是一個稱為 ndarray 的 N 維數組類型。 它描述相同類型的元素集合,NumPy 數組是通常的 Python 數組的擴展

     ndarray 配備了大量的函數和運算符,可以幫助我們快速編寫各種類型計算的高性能代碼每個元素在記憶體中使用相同大小的塊

  2、NumPy 數組的創建方法:

    ①從其他 python 數據類型(如:列表、元組等)轉換過來

    ②NumPy 原生數組的創建(通過 arange、ones、zeros 等創建)

    ③使用特殊庫函數(例如,random)創建

    ④從磁碟讀取數組,無論是標準格式還是自定義格式

    通過使用字元串或緩衝區從原始位元組創建數組

import numpy as np

lst = [1, 2, 3]
arr = np.array(lst)
# 輸出 Type:  <class 'numpy.ndarray'>
#      arr:  [1 2 3]
print("Type: ", type(arr), "\narr: ", arr)

# numpy.arange(star, end, step) 返回 [star, end) 隔 step-1 的各個元素
# 輸出 [1 3 5 7 9]
arr = np.arange(1, 10, 2)
print("arr", arr, sep=" = ")

# numpy.random.randn(size) 創建一個長度為 size 的服從標準正態分佈的隨機數組
arr = np.random.randn(5)
print("arr: ", arr)
# numpy.random.random(size) 創建一個範圍為 [0, 1),長度為 size 的服從均勻分佈的隨機數組
arr = np.random.random(5)
print("arr: ", arr)

# numpy.linspace(star, end, size) 創建一個長度為 size,範圍為 [star, end] 的數組
# 輸出 [0.  2.5  5.  7.5  10.]
arr = np.linspace(0, 10, 5)
print("arr: ", arr)

# numpy.zeros(shape) 創建一個用 0 填充,形狀為 shape 的數組
a = np.zeros((2, 2))
print("a", a, sep=" = ")

b = np.ones((2, 2))
print("b", b, sep=" = ")

c = np.full((2, 2), 7)  # 創建一個 2*2 矩陣,並填充 7
print("c", c, sep=" = ")

d = np.eye(3)  # 創建一個 3*3 的單位矩陣
print("d", d, sep=" = ")

註:np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) 里,

  object 表示任何暴露數組介面方法的對象都會返回一個數組或任何(嵌套)序列;

  dtype 為數組的數據類型,可選;copy 可選,預設為true,表示對象是否被覆制;order 里 C(按行)、F(按列)或A(任意,預設);

  subok 預設情況下,返回的數組被強製為基類數組。 如果為true,則返回子類;ndmin 指定返回數組的最小維數

 

import numpy as np

# 本來是一個一維數組,但通過 ndmin=2 使得數組最小維度為2維
# 輸出 arr: [[1 2 3 4]] 註意為 2 維數組
arr = np.array([1, 2, 3, 4], ndmin=2)
print("arr", arr, sep=": ")
# 輸出 arr: [[1 2] [3 4]],因為其維度大於最小維度
arr = np.array([[1, 2], [3, 4]], ndmin=1)
print("arr", arr, sep=": ")

# 指定數據類型為複數
arr = np.array([1, 2, 3], dtype=complex)
# 輸出 arr: [1.+0.j  2.+0.j  3.+0.j]
print("arr", arr, sep=": ")

 

  3、數組屬性:

    ①shape:返回數組形狀,如 (2, 3) 表示 2 行 3 列的 2 維數組

    ②ndim:返回數組維度

    ③size:返回數組裡元素個數

    ④itemsize:返回數組中每個元素的位元組單位長度

     ⑤T:轉置矩陣,但不會改變原矩陣

    ⑥flags:返回對象的記憶體信息

    ⑦real:返回元素的實部

    ⑧imag:返回元素的虛部

    ⑨data:包含實際數組元素的緩衝區,由於一般通過數組的索引獲取元素,所以通常不需要使用這個屬性

import numpy as np

# shape 這一數組屬性返回一個包含數組維度的元組,它也可以用於調整數組大小
arr = np.array([[1, 2, 3], [4, 5, 6]])
arr_t = arr[:, 2]
# 輸出列號為 2 的所有元素,即 [3, 6]
print("arr_t[][2]: ", arr_t)
# 輸出數組形狀,這裡為 (2, 3)
print("The arr's shape: ", arr.shape)
arr.shape = (3, 2)      # 修改形狀為 3 行 2 列,註意形狀和元素個數
print("The new arr: ", arr)
# 也可以通過 reshape() 函數來調整大小,但不會改變原數組
temp = arr.reshape(2, 3)
print(temp)     # 2 維數組,且數組裡有 3 個元素

# ndim 屬性返回數組維度
arr = np.arange(24)     # 創建 [0...23] 的數組
print(arr.ndim)     # 輸出 1
arr.shape = (2, 4, 3)   # 修改為 3 維數組
print("arr's ndim: ", arr.ndim)     # 輸出 3

# itemsize 這一數組屬性返回數組中每個元素的位元組單位長度
arr = np.array([1, 2, 3, 4, 5])
print("size: ", arr.size)
print("itemsize: ", arr.itemsize)     # 輸出 4(整數預設為 4 位元組)

# dtype 返回數組元素類型
print("dtype: ", arr.dtype)     # 輸出 dtype: int32(即 4 位元組)
arr.dtype = np.int8     # 修改整數類型
print("itemsize: ", arr.itemsize)     # 輸出 1

arr = np.array([[1, 2, 3], [4, 5, 6]])
# 調用矩陣的 T 屬性,可以轉置這個矩陣,但不會改變原矩陣
print("translate arr: ", arr.T)
print("arr: ", arr)

# 輸出元素的實虛部
arr = np.array([1+2j, 2+3j, 3+4j])
print("arr's real: ", arr.real)     # 輸出 [1. 2. 3.]
print("arr's imag: ", arr.imag)     # 輸出 [2. 3. 4.]

# 輸出對象的記憶體信息
print(arr.flags)

 

    4、數組的簡單運算:

      大部分數學運算均只對在相應元素進行,如運算四則運算加減乘除,並且運算支持廣播

      (即不同形狀的數組如果符合某種條件則可以進行運算)!

      若要進行矩陣乘法則需要函數 dot() 或運算符 @

import numpy as np

arr_one = np.array([[1.0, 2.0], [3.0, 4.0]])
arr_two = np.array([[5.0, 6.0], [7.0, 8.0]])
# 四則運算時對應元素進行運算
sum = arr_one + arr_two
dif = arr_one - arr_two
mul = arr_one * arr_two
quo = arr_one / arr_two
matrix_product = arr_one.dot(arr_two)       # 矩陣乘法
print(("sum: ", sum), ("dif: ", dif), ("mul: ", mul), ("quo: ", quo), sep="\n")
print("matrix_product: ", matrix_product)
# 大小比較也是通過對應元素進行的
print("arr_one < arr_two = ", arr_one < arr_two)
print("arr_one ** 2", arr_one ** 2, sep=" = ")
# @ 可以用於矩陣乘法
print("matrix_product: ", arr_one @ arr_two)

 

    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 多態 什麼是多態 指的是同一類/種事物的不同形態(其實就是繼承關係的表現) 為何要用多態 多態性:在多態的背景下,可以在不用考慮對象具體類型的前提下而直接使用對象 多態性的精髓:統一 這就好比開奧迪車,寶馬車和奇瑞qq,開的都是車,學開車不是學開某一輛車。 父類定義了,以後子類需要使用父類的功能,直 ...
  • 配置類: 調用: ...
  • 上一次我們已經通過代碼,簡單的認識了工廠方法模式,具體的思路請移步到 "設計模式之工廠模式(二)" ,進行查看。這次,讓我們通過設計模式的思想,來好好認識下工廠方法模式。 創建者和產品 所有工廠模式都用來封裝對象的創建。工廠方法模式(Factory Method Pattern)通過讓子類決定該創建 ...
  • log4j log4j log4j.rootLogger=INFO, stdout log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.app ...
  • 文章首發: "結構型模式:橋接模式" 七大結構型模式之二:橋接模式。 簡介 姓名 :橋接模式 英文名 :Bridge Pattern 價值觀 :解耦靠我 個人介紹 : Decouple an abstraction from its implementation so that the two ca ...
  • 前言: 這是一篇面向對象作業總結,作業內容是模擬電梯調度,一共有三個階段,具體要求不詳述,第一階段只要求先來先服務電梯,第二次支持捎帶,第三次則需要多部電梯協調,通過換乘來完成請求。本次作業在優化方面效果不佳。設計比較統一,設計原則檢查放在最後。 第5次作業 類圖如下: 說明: 具體的來說,M是主入 ...
  • 騰訊雲伺服器 點擊添加紀錄,紅色框框裡面填寫自己的公網IP即可。 阿裡雲上搭建php+mysql服務,並使用ftp將本地php文件及資料庫文件上傳到伺服器 先搭建php+MySQL環境 下載 "xampp" 。 XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟體包。 ...
  • @ "TOC" 1.變數 變數用於存儲要在電腦程式中引用和操作的信息。它們的唯一目的是在記憶體中標記和存儲數據。然後可以在整個程式中使用這些數據。變數存儲在記憶體中的值。這就意味著在創建變數時會在記憶體中開闢一個空間。 基於變數的數據類型,解釋器會分配指定記憶體,並決定什麼數據可以被存儲在記憶體中。因此,變 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...