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

2021-01-11 一起學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入門詳細教程
    本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。numpy中支持5類創建數組的方式:以上方法中,最為常用的是方法1、2、5。
  • python數據科學系列:numpy入門詳細教程
    numpy中支持5類創建數組的方式:以上方法中,最為常用的是方法1、2、5。數組變形是指對給定數組重新整合各維度大小的過程,numpy封裝了4類基本的變形操作:轉置、展平、尺寸重整和複製。主要方法接口如下:
  • Python Numpy-數組的常用函數
    日常使用numpy進行數據分析的時候,通常會使用模塊提供的函數,很大程度上方便了對於數據的操作。
  • NumPy中的廣播:對不同形狀的數組進行操作
    它是數據科學領域中許多其他庫(例如Pandas)的基礎。  在機器學習領域,無論原始數據採用哪種格式,都必須將其轉換為數字數組以進行計算和分析。 因此,需要對陣列進行快速,魯棒和準確的計算,以對數據執行有效的操作。  NumPy是科學計算的主要庫,因為它提供了我們剛剛提到的功能。 在本文中,我們重點介紹正在廣播的NumPy的特定類型的操作。
  • NumPy ndarray數組的創建
    下面將介紹Numpy的一些常用方法,尤其是與機器學習、深度學習相關的一些內容。NumPy 封裝了一個新的數據類型 ndarray(N-dimensional Array),它是一個多維數組對象。該對象封裝了許多常用的數學運算函數,方便我們做數據處理、數據分析等。那麼,如何生成 ndarray 呢?
  • Python數據分析之numpy數組全解析
    1 什麼是numpy2 numpy數組創建2.1 基本方法:np.array()2.2 通用方法:np.ones()、np.zeros()、np.eye()2.3 讀取外部數據3 numpy中數組的數據類型4 numpy中數組的形狀5 索引與切片5.1 按索引取值
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    01如何獲取numpy數組元素的真實地址?在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構成一個強大的類似於Matlab的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?
  • Python數據分析類庫系列-Numpy之多維數組ndarray
    NumPy之於數值計算特別重要的原因之一,是因為它可以高效處理大數組的數據。 這是因為: NumPy是在一個連續的內存塊中存儲數據,獨立於其他Python內置對象。NumPy的C語言編寫的算法庫可以操作內存,而不必進行類型檢查或其它前期工作。
  • 以別墅圖片為例 結合numpy和OpenCV庫 探尋Python中數組組合方式
    前幾篇博文我們介紹了numpy的基礎知識numpy庫學習總結(基礎知識)和numpy中array數組的維度變化Python數據分析必備基本功 numpy數組維度變換的常用方法匯總。今天,我們來梳理一下numpy中數組array的組合操作。
  • NumPy ndarray數組元素的獲取
    生成 ndarray 數組後,如何讀取我們所需要的數據呢?
  • Numpy的ndarray:一種多維數組對象
    前言Numpy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。可以利用這種數組對整塊數據執行一些數學運算。模塊導入方式如下:import numpy as npndarray是一個通用的同構數據多維容器,也就是說,其中的所有元素必須是相同類型的。
  • NumPy基礎教程,帶你玩轉多維數組
    Python 中的標準 type 函數同樣可以用於顯示數組類型,NumPy 有它自己的類型如:numpy.int32, numpy.int16, 和 numpy.float64,其中「int」和「float」代表數據的種類是整數還是浮點數,「32」和「16」代表這個數組的字節數(存儲大小)。ndarray.itemsize:數組中每個元素的字節存儲大小。
  • Python入門教程(二):Numpy數組基礎
    Python中的數組操作幾乎等同於Numpy數組操作,今天我們會展示用Numpy數組操作獲取數據或者子數組,對數組進行分裂,變形和連接的例子。首先,我們先介紹幾類基本的數組操作:數組的屬性確定數組的大小,形狀,儲存大小,數據類型數組的索引:獲取和設置各個元素的值數組的切分:在大的數組中獲取或設置更小的子數組
  • NumPy的數組對象
    NumPy的主要操作對象是同類型的多維數組,數組中的所有元素類型都是相同的,數組對象名是ndarray,別名是array。一、創建數組可以有多種方式創建NumPy數組:(1)使用NumPy的array函數從Python列表中創建數組,數組類型由列表中的數據類型確定;(2)使用NumPy的zeros函數創建數組元素全部為0的數組,默認情況下數組元素的類型為float64;(3)使用NumPy的ones函數創建數組元素全部為1的數組,默認情況下數組元素的類型為float64;(4)使用NumPy
  • Python教程:numpy數組初始化為相同的值
    有時我們需要將numpy數組初始化為相同的值,numpy提供了一些方法幫助我們實現這個目的。 1. np.zeros np.zeros返回來一個給定形狀和類型的用0填充的數組。
  • Python編程:如何規範numpy中數組元素的列印輸出格式
    引言對於Python語言開發者,如果你經常處理大量數據運算的話,numpy是一個必不可少的程序擴展庫,它支持大維度數組與矩陣運算,提供了非常豐富的數學運算函數,並且,相對於Python自身提供的列表類型,它在運算速度上有著無與倫比的優勢。
  • D02 Numpy常用函數,如何優雅的遍歷一個多維數組?
    reshapenumpy.reshape(arr, newshape, order=』C』)arr 是需要改變形狀的數組newshape 是新數組的維度屬性,新數組的維度屬性應與原數組兼容,例如行列相等order 是指定按行序或列序改變數組,』C』 — 按行,』F』 — 按列,』A』 — 原順序,』k』 — 元素在內存中的出現順序。其默認值為』C』。
  • NumPy庫中的基本操作
    基本操作如今我們已經知曉如何使用numpy庫進行數組的定義以及新建,下面我們就該來學習數組的各種運算方法了。算術運算符數組的第一類運算是使用算術運算符進行的運算。最顯而易見的是為數組加上或乘以一個標量。這些運算符還可以用於兩個數組的運算。在NumPy中,這些運算符為元素級。
  • Python學習第113課——numpy中用條件判斷去篩選數組中的元素
    之前我們學習了如何在numpy中查找數組元素的方法和技巧,現在我們學習如何用條件判斷的方式篩選數組的元素。●numpy中的數組可以直接進行比較直接上代碼:運行結果:我們看到,condition列印出來,它的結構和h的結構一樣。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    一般情況下,DLL函數中傳遞C語言類型的數組,在接收到Python語言中時,通常將其轉換為numpy庫裡面的數組類型,這樣做的好處是可以藉助於numpy強大的分析處理功能對數據直接作後續處理。這次通過例子演示下C語言數組到numpy數組之間是怎樣傳遞的。