NumPy中對數組進行切分及一些基本概念

2021-01-21 一起學python

數組切分

上面講了使用棧操作把多個數組組裝到一起的方法。接下來看一下它的逆操作:把一個數組分為及部分。在NumPy中,該操作要用到切分方法。同理,我們也有一組函數,水平切分用hsplit( )函數,垂直切分用vsplit( )函數。

水平切分數組的意思是把數組按照寬度切分成兩部分,例如4x4矩陣將被切分為兩個4x2的矩陣。

反之,垂直切分指的是將數組按照高度分為兩部分,如4x4矩陣將被切分為兩個2x4矩陣。

split( )函數更為複雜,可以把數組分為幾個不對稱的分布。此外,除了傳入數組作為參數外,還得指定被切分部分的索引。如果指定axis=1項,索引為列索引;如果axis=0,索引為行索引。

例如,要把矩陣切分為三部分,第一部分為第一列,第二部分為第二列、第三列,而第三部分為最後一列。你需要像下面這樣指定索引值。

你也可以按行切分,方法相同。

基本概念

我們將介紹NumPy庫中的幾個常用概念。我們會講解副本和視圖的區別,其中著重講解兩者返回值的不同點。我們還會介紹NumPy函數的很多事務隱式使用的廣播機制。

對象的副本或視圖

你可能已經注意到了,NumPy中,尤其是在做數組運算或數組操作時,返回結果不是數組的副本就是視圖。NumPy中,所有賦值運算不會為數組和數組中的任何元素創建副本。

把數組a賦給數組b,實際上不是為a創建副本,b只不過是調用數組a的另一種方式。事實上,修改a的第三個元素,同樣也會修改b的第三個元素。數組的切片操作返回的對象只是原數組的視圖.

如上所見,即使是切片操作得到的結果,實際上仍指向相同的對象。如果想為原數組生成一份完整的副本,從而得到一個不同的數組,使用copy( )函數即可。

上面的例子中,即使改動數組a的元素,數組c仍保持不變。

向量化

向量化和廣播這兩個概念是NumPy內部實現的基礎。有了向量化,編寫代碼時無需使用顯式循環。這些循環實際上不能省略,只不過是在內部實現,被代碼中的其他結構代替。向量化的應用使得代碼更加簡潔,可讀性更強,你可以說使用了向量化方法的代碼看上去更「pythonic」。向量化使得很多運算看上去更像數學表達式,例如,NumPy中兩個數組相乘可以表示為a*b;甚至兩個矩陣相乘也可以表示為:A*B;而其他的語言則需要使用for循環結構。比如我們的c++語言結構就需要使用雙層的for循環,才能夠計算出數組的值:

由此可見,使用NumPy時,代碼的可讀性更強,其表達式更像是數學表達式。

相關焦點

  • Numpy庫對數組進行操作
    條件和布爾數組到目前為止,你已經嘗試過用索引和切片方法從數組中選擇或抽取一部分元素。這些方法使用數值形式的索引。另外一種從數組中有選擇性地抽取元素的方法是使用條件表達式和布爾運算符。我們來詳細看一下這種方法,例如,你想從由0到1之間的隨機數組成的4x4型矩陣中選取所有小於0.5的元素。創建隨機數矩陣後,如果使用表示條件的運算符,比如這裡的小於號,你將會得到布爾值組成的數組。對於原數組中條件滿足的元素,布爾數組中處於同等位置(也就是小於0.5的元素所處的位置)的元素為True。實際上,從數組中選取一部分元素時,隱式地用到了布爾數組。
  • NumPy中的廣播:對不同形狀的數組進行操作
    它是數據科學領域中許多其他庫(例如Pandas)的基礎。  在機器學習領域,無論原始數據採用哪種格式,都必須將其轉換為數字數組以進行計算和分析。 因此,需要對陣列進行快速,魯棒和準確的計算,以對數據執行有效的操作。  NumPy是科學計算的主要庫,因為它提供了我們剛剛提到的功能。 在本文中,我們重點介紹正在廣播的NumPy的特定類型的操作。
  • Numpy對數組元素進行操作
    切片操作切片操作是指抽取數組的一部分元素生成新數組。對Python列表進行切片操作得到的數組是原數組的副本,而對NumPy數組進行切片操作得到的數組則是指向相同緩衝區的視圖。如省去第一個數字,NumPy會認為第一個數字是0(對應數組的第一個元素);如省去第二個數字,NumPy則會認為第二個數字是數組的最大索引值(也就對應數組最後一個元素);如省去最後一個數字,它將會被理解為1,也就是抽取所有的元素而不再考慮元素的間隔問題了。對於二維數組,切分句法依然適用,只不過需要分別指定行和列的索引值。
  • 如何獲取numpy數組地址?如何與ctypes數組共享內存?
    1、如何獲取numpy數組元素的真實地址?在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?2, 3, 4, 5]可見,將數組a中的第一個元素的值由1改成10後,b數組中第一個元素也同步改變成10了。
  • 機器學習之NumPy庫-創建數組
    機器學習的最基礎模塊就是numpy模塊了,而numpy模塊中的數組操作又是重中之重另一方面,它要求用戶手動設置數組中的所有值,並應謹慎使用。numpy.fromiter 方法從可迭代對象中建立 ndarray 對象,返回一維數組。
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構成一個強大的類似於Matlab的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?
  • 以別墅圖片為例 結合numpy和OpenCV庫 探尋Python中數組組合方式
    前幾篇博文我們介紹了numpy的基礎知識numpy庫學習總結(基礎知識)和numpy中array數組的維度變化Python數據分析必備基本功 numpy數組維度變換的常用方法匯總。今天,我們來梳理一下numpy中數組array的組合操作。
  • Numpy的ndarray:一種多維數組對象
    前言Numpy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。可以利用這種數組對整塊數據執行一些數學運算。模塊導入方式如下:import numpy as npndarray是一個通用的同構數據多維容器,也就是說,其中的所有元素必須是相同類型的。
  • NumPy庫中的基本操作
    基本操作如今我們已經知曉如何使用numpy庫進行數組的定義以及新建,下面我們就該來學習數組的各種運算方法了。算術運算符數組的第一類運算是使用算術運算符進行的運算。最顯而易見的是為數組加上或乘以一個標量。這些運算符還可以用於兩個數組的運算。在NumPy中,這些運算符為元素級。
  • Python教程:numpy數組初始化為相同的值
    有時我們需要將numpy數組初始化為相同的值,numpy提供了一些方法幫助我們實現這個目的。 1. np.zeros np.zeros返回來一個給定形狀和類型的用0填充的數組。
  • Python編程:如何規範numpy中數組元素的列印輸出格式
    引言對於Python語言開發者,如果你經常處理大量數據運算的話,numpy是一個必不可少的程序擴展庫,它支持大維度數組與矩陣運算,提供了非常豐富的數學運算函數,並且,相對於Python自身提供的列表類型,它在運算速度上有著無與倫比的優勢。
  • Python學習第113課——numpy中用條件判斷去篩選數組中的元素
    之前我們學習了如何在numpy中查找數組元素的方法和技巧,現在我們學習如何用條件判斷的方式篩選數組的元素。●numpy中的數組可以直接進行比較直接上代碼:運行結果:我們看到,condition列印出來,它的結構和h的結構一樣。
  • Python學習第114課——numpy中ndarray的四則運算
    我們為什麼要學習numpy?numpy其實就是number+Python的簡寫,意思就是通過Python對數據進行處理。要對數據進行處理,就少不了最基本的加減乘除等操作。這節我們學習numpy中數組的一些基本的四則運算。●numpy中數組的加法運算我們首先生成x和y兩個float類型的數組,然後把它們進行相加。
  • NumPy的數組對象
    NumPy的主要操作對象是同類型的多維數組,數組中的所有元素類型都是相同的,數組對象名是ndarray,別名是array。一、創建數組可以有多種方式創建NumPy數組:(1)使用NumPy的array函數從Python列表中創建數組,數組類型由列表中的數據類型確定;(2)使用NumPy的zeros函數創建數組元素全部為0的數組,默認情況下數組元素的類型為float64;(3)使用NumPy的ones函數創建數組元素全部為1的數組,默認情況下數組元素的類型為float64;(4)使用NumPy
  • D02 Numpy常用函數,如何優雅的遍歷一個多維數組?
    reshapenumpy.reshape(arr, newshape, order=』C』)arr 是需要改變形狀的數組newshape 是新數組的維度屬性,新數組的維度屬性應與原數組兼容,例如行列相等order 是指定按行序或列序改變數組,』C』 — 按行,』F』 — 按列,』A』 — 原順序,』k』 — 元素在內存中的出現順序。其默認值為』C』。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    一般情況下,DLL函數中傳遞C語言類型的數組,在接收到Python語言中時,通常將其轉換為numpy庫裡面的數組類型,這樣做的好處是可以藉助於numpy強大的分析處理功能對數據直接作後續處理。這次通過例子演示下C語言數組到numpy數組之間是怎樣傳遞的。
  • Python學習第117課——numpy中dot的運用舉例
    我們現在入門階段知道有這個概念就行,能解決實際問題就行,後面遇到了問題再去深入。現在我們是為了入門,入門之後,你可以根據自身的底子去選擇發展方向。閒話少敘,我們對numpy中的矩陣相乘做一些舉例說明。我們還是使用上節的兩個矩陣為例。上節我們用手寫推導矩陣相乘過程如下:我們現在用代碼演示一下numpy中的矩陣相乘。
  • Python中NumPy簡介及使用舉例
    NumPy中定義的最重要的對象是稱為ndarray的N維數組類型。它描述相同類型的元素集合,可以使用基於零的索引訪問集合中元素。基本的ndarray是使用NumPy中的數組函數創建的: numpy.array。NumPy支持比Python更多種類的數值類型。NumPy數值是dtype(數據類型)對象的實例,每個對象具有唯一的特徵。
  • Python中的Numpy基礎20問
    廣播(Broadcast)是 numpy 對不同形狀(shape)的數組進行數值計算的方式, 對多個數組的算術運算通常在相應的元素上進行。較小的數組在較大的數組上「廣播」,以便它們具有兼容的形狀。比如說一個一維數組乘以一個數字,相當於一維數組裡每個元素都乘以這個數。
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。★技巧1:★技巧2:以上兩種寫法運行結果都是:以上兩種簡寫技巧,相當於從h中找到元素時,通過兩個list[0,1,2]和[2,1,0],每個list的元素一一對應,分別取出第1行第3列、第2行第2列、第3行第1列的元素,三個元素分別為3、5、7。相當於h[]中的第一個list是代表元素所在行,第二個list代表元素所在列。