Python三方庫:Numpy(數組處理)

来源:https://www.cnblogs.com/guyuyun/archive/2020/07/12/13286163.html
-Advertisement-
Play Games

Numpy是Python中用於處理數組的一個非常強大的庫,同時也是Pandas等數據處理的庫的核心,如果你有大量處理數組類型數據的操作,比如操作CSV文件數據或涉及數組的科學計算等,那麼Numpy是一個非常好的選擇。 註:此筆記中主要是以一維數組和二維數組作為示例,更高維的數組因為用的較少,同時原理 ...


Numpy是Python中用於處理數組的一個非常強大的庫,同時也是Pandas等數據處理的庫的核心,如果你有大量處理數組類型數據的操作,比如操作CSV文件數據或涉及數組的科學計算等,那麼Numpy是一個非常好的選擇。

註:此筆記中主要是以一維數組和二維數組作為示例,更高維的數組因為用的較少,同時原理和二維數組也相似,即數組中再套數組,所以就不再單獨解釋了。為了簡化表示,文中的np表示Numpy,即import numpy as np。

 

一、創建數組

Numpy中的數組對象類型為ndarray,數組的創建,最基礎的就是使用np.array()方法創建數組了,傳入對應的列表或元組即可,創建時也可使用dtype參數指定元素的數據類型。在使用array方法創建數組時,數組中的元素必須是同一類型,如果不是,則會發生自動類型轉換,如果不想進行自動轉換,可指定數據類型為object,具體見示例代碼。

其他還有一些用於創建特定類型數組的方法,常用的有:

  • np.arange([start, ]stop, [step, ]dtype=None):相當於Python中range函數,創建一個指定範圍[0, start)或[start, stop)的連續的(具有相同間隔step)的數組。
  • np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0):創建一個指定範圍內具有相同間隔的指定元素個數的數組,註意,這個方法不用指定間隔,而是根據元素個數自動判斷間隔。
  • np.zeros(shape, dtype=float, order='C'):創建一個元素值為0的數組。
  • np.ones(shape, dtype=None, order='C'):創建一個元素值為1的數組。
  • np.empty(shape, dtype=float, order='C'):創建一個元素值未初始化的數組。
  • np.zeros_like(a, dtype=None, order='K', subok=True, shape=None):根據另一個數組創建一個相同維數和元素個數且元素值為0的數組。
  • np.ones_like(a, dtype=None, order='K', subok=True, shape=None):根據另一個數組創建一個相同維數和元素個數且元素值為1的數組。
  • np.random.rand(d0, d1, ..., dn):創建一個指定維數(d0, d1, ..., dn),元素為0到1之間的隨機數的數組,d0的值表示這一維的元素個數。
  • np.random.randint(low, high=None, size=None, dtype=int):創建一個元素值為[0, low)或[low, high)之間的隨機整數的數組,可用size指定數組的shape。
  • np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0):創建一個指定範圍內(base的start次冪到base的stop次冪)具有相同間隔的指定元素個數的數組。

示例:

 

二、數組索引和切片

Numpy中數組的索引和切片的使用形如[d0, d1, ...]的方式,其中使用逗號分隔每一維的索引和切片表示,而每一維的索引和切片表示又是與Python中列表的使用是一致的,所以對於一位數組的索引和切片直接就和Python的列表使用是一樣的了,這裡也不再展示示例代碼了,重點在於二維及多位數組的索引和切片使用。

示例:

 

三、數組常用方法

常用屬性:

  • ndarray.dtype:數組元素的數據類型。
  • ndarray.shape:數組的維數和對應元素個數信息。
  • ndarray.size:數組中的元素個數。
  • ndarray.ndim:數組的維數。

Numpy特色操作

常用方法(大多adarray方法都能在numpy下直接找到並使用):

  • ndarray.astype(dtype, order='K', casting='unsafe', subok=True, copy=True):將數組中元素的數據類型轉換為指定的類型。
  • ndarray.fill(value):將數組中的元素填充為指定的值。
  • ndarray.flatten(order='C'):將數組“拉直”,變為一維數組,返回的是一個新的數組。
  • ndarray.ravel([order]):也是將數組“拉直”,變為一維數組,但返回的是原數組的一個視圖索引,即對這個一維數組的修改會同步到原數組。
  • ndarray.reshape(shape, order='C'):重新定義數組的shape。
  • ndarray.transpose(*axes):對數組進行“翻轉”。
  • ndarray.T:相當於ndarray.transpose()。
  • ndarray.round(decimals=0, out=None):以“四捨五入”的方式對數組元素進行取整,decimals參數可以指定小數位數。
  • ndarray.max(axis=None, out=None, keepdims=False, initial=<no value>, where=True):獲取數組中的最大值,也可以獲取指定維度的最大值。
  • ndarray.min(axis=None, out=None, keepdims=False, initial=<no value>, where=True):獲取數組中的最小值,也可以獲取指定維度的最小值。
  • ndarray.mean(axis=None, dtype=None, out=None, keepdims=False):獲取數組的平均值,也可以獲取指定維度的平均值。
  • ndarray.sum(axis=None, dtype=None, out=None, keepdims=False, initial=0, where=True):獲取數組的和,也可以獲取指定維度的和。
  • ndarray.argmax(axis=None, out=None):最大值的索引。
  • ndarray.argmin(axis=None, out=None):最小值的索引。
  • ndarray.clip(min=None, max=None, out=None, **kwargs):截斷操作,將數組中小於min值的元素重置為min值,大於max值的元素重置為max值。
  • ndarray.sort(axis=-1, kind=None, order=None):排序,也可以按照指定維度進行排序。
  • ndarray.argsort(axis=-1, kind=None, order=None):返回排序之後的元素索引。
  • numpy.vstack(tup):縱向連接數組。
  • numpy.hstack(tup):橫向連接數組。
  • numpy.where(condition[, x, y]):根據條件過濾數組。

示例:

 

四、文件讀寫

文本文件的讀寫可以使用以下兩個方法:

  • numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='n', header='', footer='', comments='# ', encoding=None):將一個數組保存到指定的文本文件中。fname為文件名稱,X表示數組,fmt表示數據格式(以%表示的字元串格式化),delimiter為分隔符,其他參數也都是見名知意,看著使用就可以了。
  • numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None):將文本文件中的數據載入到數組當中。

類似於數據的序列化和反序列化,可以將數組對象保存到文件中,然後載入出來後直接就是原先的數組對象:

  • numpy.save(file, arr, allow_pickle=True, fix_imports=True):將數對象組保存到指定文件中。
  • numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII'):從文件中讀取數組對象。

 


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

-Advertisement-
Play Games
更多相關文章
  • pyenv 簡介 pyenv 是 Python 版本管理工具。 pyenv 可以改變全局的 Python 版本,在系統中安裝多個版本的 Python, 設置目錄級別的 Python 版本,還能創建和管理 virtual python environments。 安裝 pyenv 安裝git:~]# ...
  • 一、記憶體模型及分區 JVM 分為堆區和棧區,還有方法區,初始化的對象放在堆裡面,引用放在棧裡面,class 類信息常量池(static 常量和 static 變數)等放在方法區。 1、棧(Stack-線程私有) 1.1 棧的結構是棧幀組成的,調用一個方法就壓入一幀,幀上面存儲局部變數表,操作數棧,方 ...
  • 一個整數類型的變數自身加 1 可以這樣寫: a = a + 1; 或者 a += 1; 不過,C語言還支持另外一種更加簡潔的寫法,就是: a++; 或者 ++a; 這種寫法叫做自加或自增,意思很明確,就是每次自身加 1。 相應的,也有a--和--a,它們叫做自減,表示自身減 1。 ++和--分別稱為 ...
  • 文章已托管到GitHub,大家可以去GitHub查看閱讀,歡迎老闆們前來Star! 搜索關註微信公眾號 碼出Offer 領取各種學習資料! 深度理解Spring IOC(控制反轉) 一、IOC概述 Inverse Of Controll即為控制反轉,簡稱IOC 。 簡單來說,IOC反轉了依賴關係的滿 ...
  • 【一、項目背景】 讓更多的人去學習html,以廣東科技學院的導航欄為例, 教大家怎麼去做一個橫向的導航欄。 【二、項目準備】 準備一個編程的軟體Dreamweaver,打開軟體點擊文件新建一個叫導航欄的項目,如下圖所示。 點擊確定之後,會彈出下圖。 【三、項目實施】 1. 在標簽裡面寫下一個框架: ...
  • 可能在synchronized關鍵字的實現原理中,你已經知道了它的底層是使用Monitor的相關指令來實現的,但是還不清楚Monitor的具體細節。本文將讓你徹底Monitor的底層實現原理。 管程 一個管程可以被認為是一個帶有特殊房間的建築,這個特殊房間只能被一個線程占用。這個房間包含很多數據和代 ...
  • 為什麼阿裡巴巴要禁用Executors創建線程池?看阿裡巴巴開發手冊併發編程這塊有一條:線程池不允許使用Executors去創建,而是通過ThreadPoolExecutor的方式,通過源碼分析禁用的原因 一、線程池的定義 管理一組工作線程。通過線程池復用線程有以下幾點優點: 減少資源創建 ⇒ 減少 ...
  • 一、廣播數據包 1.特性 這種通信類似於廣播,要想實現這個功能,需要使用特殊的IP地址,要想實現多播或者廣播通信的主機必須加入一個D類地址,D類地址的十進位表示範圍為224.0.0.0~239.255.255.255 需要使用的類是`java.net.MulticastSocket. 常用的構建方法 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...