Scipy快速入門

来源:https://www.cnblogs.com/NeoNexus/archive/2023/12/28/17933434.html
-Advertisement-
Play Games

Scipy快速入門 註意事項 圖床在國外,配合美區、日區網路使用更佳,如遇圖片載入不出來,考慮換個VPN吧。 監修中敬告 本文處於Preview階段,不對文章內容負任何責任,如有意見探討歡迎留言。 聯繫方式——綠泡泡:NeoNexusX 常量 稀疏矩陣 (scipy.sparse) CSC 壓縮稀疏 ...


Scipy快速入門

標準監督

註意事項

圖床在國外,配合美區、日區網路使用更佳,如遇圖片載入不出來,考慮換個VPN吧。

監修中敬告

標準監修中

本文處於Preview階段,不對文章內容負任何責任,如有意見探討歡迎留言。

聯繫方式——綠泡泡:NeoNexusX

常量

稀疏矩陣 (scipy.sparse)

CSC 壓縮稀疏列(csr_matrix()

用於高效的算數,快速列切分。

    # csr
    csr_arr = np.array([0, 0, 1, 0, 0, 0, 0, 1])
    print(f'csc_matrix(csc_arr) is  : \n{csc_matrix(csr_arr)}\n')

結果如下:

csc_matrix(csc_arr) is  : 
  (0, 2)	1
  (0, 7)	1

CSR 壓縮稀疏行(csc_matrix())

用於快速行切分,更快的矩陣向量乘積。

    # csc
    csc_arr = np.array([[0],
                        [1],
                        [0],
                        [0],
                        [0],
                        [0],
                        ])
    print(f'csc_matrix(csc_arr) is  : \n{csc_matrix(csc_arr)}\n')

結果如下:

csc_matrix(csc_arr) is  : 
  (1, 0)	1

舉一個複雜一點的例子:

    # 獲取對應矩陣
    cm_arr = np.array([[1, 0, 6, 0, 7],
                       [0, 2, 0, 0, 0],
                       [0, 0, 3, 0, 0],
                       [0, 0, 0, 4, 0],
                       [0, 0, 0, 0, 5],
                       ])
    print(f'csr_matrix(cm_arr) is  : \n{csr_matrix(cm_arr)}\n')
    print(f'csc_matrix(cm_arr) is  : \n{csc_matrix(cm_arr)}\n')

輸出結果:

csr_matrix(cm_arr) is  : 
  (0, 0)	1
  (0, 2)	6
  (0, 4)	7
  (1, 1)	2
  (2, 2)	3
  (3, 3)	4
  (4, 4)	5

csc_matrix(cm_arr) is  : 
  (0, 0)	1
  (1, 1)	2
  (0, 2)	6
  (2, 2)	3
  (3, 3)	4
  (0, 4)	7
  (4, 4)	5

獲取非0元素(.data)

代碼如下:

    # 獲取非0元素
    print(f'csc_matrix(cm_arr).data is  : \n{csc_matrix(cm_arr).data}\n')
    print(f'csr_matrix(cm_arr).data is  : \n{csr_matrix(cm_arr).data}\n')

輸出結果:

csc_matrix(cm_arr).data is  : 
[1 2 6 3 4 7 5]

csr_matrix(cm_arr).data is  : 
[1 6 7 2 3 4 5]

獲取非0元素個數(.count_nonzero() )

    # 獲取非0元素個數
    print(f'csr_matrix(cm_arr).count_nonzero() is  : \n{csr_matrix(cm_arr).count_nonzero()}\n')
    print(f'csc_matrix(cm_arr).count_nonzero() is  : \n{csc_matrix(cm_arr).count_nonzero()}\n')

輸出結果:

csr_matrix(cm_arr).count_nonzero() is  : 
7

csc_matrix(cm_arr).count_nonzero() is  : 
7

刪除零元素(.eliminate_zeros())

註意這是一個方法,你如果用在已經建立好的矩陣是沒有效果的:

舉個例子:

    # 減少對應矩陣的0數目
    c_m = csc_matrix(cm_arr)
    c_m.eliminate_zeros()
    r_m = csr_matrix(cm_arr)
    r_m.eliminate_zeros()
    print(f'csc_matrix(cm_arr).eliminate_zeros() is  : \n{c_m}\n')
    print(f'csr_matrix(cm_arr).eliminate_zeros() is  : \n{r_m}\n')

可以看到這裡的輸出和上文的內容並沒有發生什麼變化:

csc_matrix(cm_arr).eliminate_zeros() is  : 
  (0, 0)	1
  (1, 1)	2
  (0, 2)	6
  (2, 2)	3
  (3, 3)	4
  (0, 4)	7
  (4, 4)	5

csr_matrix(cm_arr).eliminate_zeros() is  : 
  (0, 0)	1
  (0, 2)	6
  (0, 4)	7
  (1, 1)	2
  (2, 2)	3
  (3, 3)	4
  (4, 4)	5

我們再來舉個例子:

    row = [0, 0, 0, 1, 1, 1, 2, 2, 2]  # 行指標
    col = [0, 1, 2, 0, 1, 2, 0, 1, 2]  # 列指標
    data = [1, 0, 1, 0, 1, 1, 1, 1, 0]  # 在行指標列指標下的數字
    team = csr_matrix((data, (row, col)), shape=(3, 3))

    print(f'team is : \n{team}\n')
    print(f'team type is : \n{type(team)}\n')
    print(f'team.shape is : \n{team.shape}\n')

    team.eliminate_zeros()
    print(f'team.eliminate_zeros is : \n{team}\n')

輸出結果如下;

team is : 
  (0, 0)	1
  (0, 1)	0
  (0, 2)	1
  (1, 0)	0
  (1, 1)	1
  (1, 2)	1
  (2, 0)	1
  (2, 1)	1
  (2, 2)	0

team type is : 
<class 'scipy.sparse._csr.csr_matrix'>

team.shape is : 
(3, 3)

team.eliminate_zeros is : 
  (0, 0)	1
  (0, 2)	1
  (1, 1)	1
  (1, 2)	1
  (2, 0)	1
  (2, 1)	1

可以看到team轉化為另一個非稀疏的矩陣類型。

CSC和CSR的轉換 (.tocsr() / .tocsc())

這個就很簡單了,沒什麼可說的:

    # csr 2 csc
    print(f'csr_matrix is  : \n{r_m}\n')
    print(f'c_m.tocsr() is  : \n{c_m.tocsr()}\n')

將對應的CSC轉化成CSR:

csr_matrix is  : 
  (0, 0)	1
  (0, 2)	6
  (0, 4)	7
  (1, 1)	2
  (2, 2)	3
  (3, 3)	4
  (4, 4)	5

c_m.tocsr() is  : 
  (0, 0)	1
  (0, 2)	6
  (0, 4)	7
  (1, 1)	2
  (2, 2)	3
  (3, 3)	4
  (4, 4)	5

圖 (CSGraph)

使用鄰接矩陣來構建一個圖如下:

    # graph part
    # 構建了一個正方形的圖

    arr = np.array([
        [0, 2, 0, 4],
        [2, 0, 3, 0],
        [0, 3, 0, 4],
        [4, 0, 4, 0],
    ])
    graph = csr_matrix(arr)
    print(f'graph is  : \n{graph}\n')

示意圖如下:

graph LR; A <--2-->B<--3-->C<--4-->D<--4-->A

結果如下:

graph is  : 
  (0, 1)	2
  (0, 3)	4
  (1, 0)	2
  (1, 2)	3
  (2, 1)	3
  (2, 3)	4
  (3, 0)	4
  (3, 2)	4

連通性檢測 (connected_components())

    n_components, labels = connected_components(graph, directed=False, connection='weak', return_labels=True)

    print("連通分量數量:", n_components)
    print("節點標簽:", labels)

連通性輸出結果如下:

連通分量數量: 1
節點標簽: [0 0 0 0]

由於這裡沒有設置節點標簽,所以輸出全是0.

最短路 (Dijkstra()、floyd_warshall() 、bellman_ford() )

三個函數只需要將圖輸入進去就可以得到對應的到各個節點的最短路徑。

# dijkstra
print(f'dijkstra seq is : \n{dijkstra(graph, indices=0)}\n')

# Floyd warshall
print(f'floyd_warshall matrix is : \n{floyd_warshall(graph)}\n')

# bellman ford
print(f'bellman_ford matrix is : \n{bellman_ford(graph, indices=0)}\n')

結果如下:

dijkstra seq is : 
[0. 2. 5. 1.]

floyd_warshall matrix is : 
[[0. 2. 5. 1.]
 [2. 0. 3. 3.]
 [5. 3. 0. 4.]
 [1. 3. 4. 0.]]

bellman_ford matrix is : 
[0. 2. 5. 1.]

廣搜與深搜 (depth_first_order(), breadth_first_order())

兩個函數的作用都是以某個參數為基點返回對應的順序和對應節點的前驅序列。

舉個例子:

    # depth first order
    print(f'depth_first_order seq is : \n{depth_first_order(graph, 0)}\n')

    # breadth first order
    print(f'breadth_first_order seq is : \n{breadth_first_order(graph, 0)}\n')

輸出結果:

depth_first_order seq is : 
(array([0, 1, 2, 3]), array([-9999,     0,     1,     2]))

breadth_first_order seq is : 
(array([0, 1, 3, 2]), array([-9999,     0,     1,     0]))

詳見:scipy.sparse.csgraph.depth_first_order — SciPy v1.11.4 Manual

matlab數據讀取與導出( io.savemat()、io.loadmat())

# matlab part
# 導出matlab 數據 等等
matlab_output = io.savemat('filename.mat', {'data': arr})
print(f'matlab_output is \n {matlab_output} \n')

# 讀取 matlab 數據 等等
matlab_intput = io.loadmat('filename.mat')
print(f'matlab_input is \n{matlab_intput}\n')
matlab_intput_data = matlab_intput['data']
print(f'matlab_input \'s data is \n{matlab_intput_data}\n')

輸出結果如下:

返回的是字典包含了很多信息,我們可以通過字典的方式來提取內容。

matlab_output is 
 None 

matlab_input is 
{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Sun Dec 10 21:40:56 2023', '__version__': '1.0', '__globals__': [], 'data': array([[0, 2, 0, 1],
       [2, 0, 3, 0],
       [0, 3, 0, 4],
       [1, 0, 4, 0]])}

matlab_input 's data is 
[[0 2 0 1]
 [2 0 3 0]
 [0 3 0 4]
 [1 0 4 0]]

數據的外圍又被包上了一個數組,我們可以通過如下方式來實現讀取,將其變為1維的:

    matlab_intput_without = io.loadmat('filename.mat', squeeze_me=True)
    print(f'matlab_intput_without is \n{matlab_intput_without}\n')
    matlab_intput_data_without = matlab_intput_without['data']
    print(f'matlab_intput_data_without \'s data is \n{matlab_intput_data_without}\n')

輸出結果如下:

matlab_intput_without is 
{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Sun Dec 10 21:44:24 2023', '__version__': '1.0', '__globals__': [], 'data': array([[0, 2, 0, 1],
       [2, 0, 3, 0],
       [0, 3, 0, 4],
       [1, 0, 4, 0]])}

參考文獻

.eliminate_zeros()函數-CSDN博客


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

-Advertisement-
Play Games
更多相關文章
  • $0 和 __vue__ $0 是指當滑鼠點擊 Element 面板的某個 dom 元素後,console 里 $0 變數會自動指向該 dom 元素對象 __vue__ 是指 vue 框架會往 vue 組件 $mount 掛載的 dom 元素對象上添加一個 __vue__ 變數來指向當前 vue 組 ...
  • npm導入和風天氣的圖標庫後使用沒有效果,就在網上查詢了下怎麼解決,然後動手嘗試一下。 參考文章 步驟 1. 下載圖標文件(鏈接),解壓後大致這樣 2. 在transfonter網站將需要的圖標字體轉成Base64,在font\fonts文件下 選擇上傳 下載 3. 解壓後把stylesheet.c ...
  • keycloak~從login-status-iframe相關文章,可閱讀我的這兩篇keycloak~從login-status-iframe頁面總結如何跨域傳值 ,keycloak~對接login-status-iframe頁面判斷用戶狀態變更 。 什麼是跨域 跨域(Cross-Origin)是指 ...
  • 本文首發於公眾號:Hunter後端 原文鏈接:Python筆記一之excel的讀取 這裡我常用的 python 對於 excel 的讀取庫有兩個,一個是 xlsxwriter 用於操作 excel 的寫入,一個是 xlrd 用於 excel 文件的讀取。 使用的庫的版本如下: xlsx==1.2.6 ...
  • 第十九章介紹了Jasypt,用於在Spring Boot應用中加密敏感信息。通過jasypt-spring-boot-starter依賴項,配置加密演算法和密碼,並使用StringEncryptor加密和解密。加密後的信息可嵌入屬性文件中,提高資料庫密碼等敏感信息的安全性。加解密基於密鑰,建議將密鑰通... ...
  • 相較於BarCode,QRCode有明顯的特征區域,也就是左上角、右上角、左下角三個”回“字區域,得益於hierarchy中,父子關係的輪廓是連續的(下標),所以這個時候我們就可以通過cv2.findContours()返回的hierarchy來進行定位。 我們直接上代碼 1 import cv2 ...
  • C++作為一門靜態類型語言,是需要程式員聲明變數類型的。然而來到了C++11,auto的誕生使得變數聲明變得及為方便,尤其是對於比較長的模板類型,auto一定程度上為代碼編寫者減輕了負擔。到了C++23,突然來了個新特性:auto{x}/auto(x),這又是個什麼東西,它的motivation又是 ...
  • Go 泛型之泛型約束 目錄Go 泛型之泛型約束一、引入二、最寬鬆的約束:any三、支持比較操作的內置約束:comparable四、自定義約束五、類型集合(type set)六、簡化版的約束形式七、約束的類型推斷八、小結 一、引入 雖然泛型是開發人員表達“通用代碼”的一種重要方式,但這並不意味著所有泛 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...