Python中的Numpy基礎20問

2021-01-07 小小編程轅

如何改變數組的形狀?

前面說過,數組的

shape

屬性返回一個元組,能夠反映數組的形狀,包括維度以及每個軸的元素數量。

那麼如果給定一個數組,怎麼改變其形狀呢?

常用的方式有兩種:

reshape方法,它返回一個新的數組,而不能改變原始數組。resize方法,無返回值,它更改了原始數組。比如說我要將一個二維數組轉換為三維數組。

import numpy as np

# 創建二維數組

x2 = np.array([[1,2,3],[4,5,6]])

# 將x2轉換為三維數組,並且自定義每個軸的元素數量

x2.reshape(1,2,3)

'''

輸出:

array([[[1, 2, 3],

[4, 5, 6]]])

'''

reshape

方法可以傳入整數或者元組形式的參數。傳入的參數和shape屬性返回的元組的含義是一樣的。例如,x2.reshape(1,2,3)是將二維數組轉換成三維數組,參數個數代表要轉換的維度,參數數字從左到右分別表示0軸、1軸、2軸的元素數量。resize方法和reshape方法使用形式一樣,區別是resize方法改變了原始數組形狀。import numpy as np# 創建二維數組x2 = np.array([[1,2,3],[4,5,6]])# 將x2轉換為三維數組,並且自定義每個軸的元素數量x2.resize((1,2,3))x2'''輸出:array([[[1, 2, 3],[4, 5, 6]]])'''如何對數組進行索引和切片操作?numpy一維數組的索引和切片操作類似python列表,這裡不多講。比如說取一維數組前三個元素。import numpy as np# 創建一維數組x1 = np.array([1,2,3,4])# 切片,取前三個元素x1[:3]'''輸出:array([1, 2, 3])'''重點是對多維數組的索引和切片。多維數組有多個軸,那麼就需要對每個軸進行索引。例如,三維數組形狀為(x,y,z),分別代表:0軸有x個元素、1軸有y個元素,2軸有z個元素。對0、1、2軸進行索引,如果取o軸第2個元素、1軸第0個元素、2軸第3個元素,那麼索引形式就為[2,0,3]。import numpy as np# 創建三維數組x3 = np.arange(24).reshape(3,2,4)# 對該三維數組進行索引x3[2,0,3]'''輸出:19三維數組形式:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]], [[16, 17, 18, 19], [20, 21, 22, 23]]])'''切片也是同樣道理。如果取o軸前2個元素、1軸前1個元素、2軸後2個元素,那麼切片形式就為[:2,:1,-2:]。import numpy as np# 創建三維數組x3 = np.arange(24).reshape(3,2,4)# 對該三維數組進行切片x3[:2,:1,-2:]'''輸出:array([[[ 2, 3]], [[10, 11]]])三維數組形式:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]], [[16, 17, 18, 19], [20, 21, 22, 23]]])'''如何對數組裡每個元素進行迭代?說到迭代,大家很容易想到直接對數組直接使用for循環操作,對於一維數組來說,當然是可以的。import numpy as np# 創建一維數組x1 = np.array([1,2,3,4])# 迭代for i in x1: print(i)'''輸出:1234'''但對於多維數組,迭代是相對於0軸完成的,就是多維數組最外層的那一維。你沒有辦法直接遍歷數組裡每一個元素,嵌套循環又太低效。這個時候就需要用到flat方法,它可以將多維數組平鋪為一維的迭代器。import numpy as np# 創建二維數組x2 = np.array([[1,2,3],[4,5,6]])# 先平鋪,再迭代for i in x2.flat: print(i)'''輸出:123456'''如何將多維數組展開為一維數組?數組(ndarray)對象提供了ravel方法,用來將多維數組展開為一維數組。import numpy as np# 創建er維數組x3 = np.arange(12).reshape(3,4)# 對該三維數組進行索引x3.ravel()'''輸出:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])'''什麼廣播機制?廣播(Broadcast)是 numpy 對不同形狀(shape)的數組進行數值計算的方式, 對多個數組的算術運算通常在相應的元素上進行。較小的數組在較大的數組上「廣播」,以便它們具有兼容的形狀。比如說一個一維數組乘以一個數字,相當於一維數組裡每個元素都乘以這個數。

import numpy as np# 創建一維數組x1 = np.array([1,2,3])# 廣播x1 * 2'''輸出:array([2, 4, 6])'''如果相同維度的數組進行運算,其shape相同,那麼廣播就是兩個數組相同位數的元素進行運算。

import numpy as np# 創建一維數組x1 = np.array([1,2,3])x2 = np.array([4,5,6])# 廣播x1 + x2'''輸出:array([5, 7, 9])'''如果兩個數組維度不同,進行運算,這裡就觸發了廣播的兩個規則。讓所有輸入數組都向其中形狀最長的數組看齊,形狀中不足的部分都通過在前面加 1 補齊;當輸入數組的某個維度的長度為 1 時,沿著此維度運算時都用此維度上的第一組值。這兩個規則保證了不同維度數組進行運算時,其維度自動調整成一致。

import numpy as np# 創建一維數組x1 = np.array([[1,2,3],[4,5,6]])x2 = np.array([2,3,4])# 廣播x1 - x2'''輸出:array([[-1, -1, -1],[ 2, 2, 2]])'''16、numpy中如何進行數值捨入操作?around函數,用於四捨五入,返回一個新數組import numpy as np# 創建一維數組x1 = np.array([1.45,2.78,3.12])# 四捨五入,到小數點後1位np.around(x1,1)'''輸出:array([1.4, 2.8, 3.1])'''floor函數,用於向下取整,返回一個新數組import numpy as np# 創建一維數組x1 = np.array([1.45,2.78,3.12])# 向下取整np.floor(x1)'''輸出:array([1., 2., 3.])'''ceil函數,用於向上取整,返回一個新數組import numpy as np# 創建一維數組x1 = np.array([1.45,2.78,3.12])# 向下取整np.ceil(x1)'''輸出:array([2., 3., 4.])'''17、如何對數組進行轉置操作?numpy提供了transpose函數用以對數組進行維度的調換,也就是轉置操作。轉置後返回一個新數組。import numpy as np# 創建二維數組x1 = np.arange(12).reshape(3,4)# 轉置np.transpose(x1)'''輸出:array([[ 0, 4, 8], [ 1, 5, 9], [ 2, 6, 10], [ 3, 7, 11]])原數組:array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])'''當然,可以用更簡單的方法。數組對象提供了T方法,用於轉置,同樣會返回一個新數組。import numpy as np# 創建二維數組x1 = np.arange(12).reshape(3,4)# 轉置x1.T'''輸出:array([[ 0, 4, 8], [ 1, 5, 9], [ 2, 6, 10], [ 3, 7, 11]])原數組:array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])'''18、如何連接兩個相同維度的數組?numpy的concatenate函數用於沿指定軸連接相同形狀的兩個或多個數組。import numpy as np# 創建兩個二維數組x1 = np.array([[1,2,3],[4,5,6]])x2 = np.array([[7,8,9],[10,11,12]])# 連接,默認沿0軸連接np.concatenate((x1,x2))'''輸出:array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [10, 11, 12]])'''# 指定沿1軸連接np.concatenate((x1,x2),axis=1)'''輸出:array([[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 10, 11, 12]])'''19、如何向數組添加值?numpy的append函數向數組末尾追加值,可以指定不同的軸。import numpy as np# 創建一個二維數組x1 = np.array([[1,2,3],[4,5,6]])# 直接向數組末尾添加元素,返回平鋪的一維數組np.append(x1,[7,8,9])'''輸出:array([1, 2, 3, 4, 5, 6, 7, 8, 9])'''# 沿軸 0 添加元素np.append(x1, [[7,8,9]],axis = 0)'''輸出:array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])'''# 沿軸 1 添加元素np.append(x1, [[5,5,5],[7,8,9]],axis = 1)'''輸出:array([[1, 2, 3, 5, 5, 5], [4, 5, 6, 7, 8, 9]])'''numpy的insert函數可以沿給定軸,在數組中任意位置插入數據。import numpy as np# 創建一個二維數組x1 = np.array([[1,2,3],[4,5,6],[7,8,9]])# 直接在指定位置插入元素,返回平鋪的一維數組np.insert(x1,2,[0,0,0])'''輸出:array([1, 2, 0, 0, 0, 3, 4, 5, 6, 7, 8, 9])原數組:array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])'''# 指定位置,沿軸 0 插入元素np.insert(x1,1,[0,0,0],axis=0)'''輸出:array([[1, 2, 3], [0, 0, 0], [4, 5, 6], [7, 8, 9]])'''# 指定位置,沿軸 1插入元素np.insert(x1,2,[0,0,0],axis=1)'''輸出:array([[1, 2, 0, 3], [4, 5, 0, 6], [7, 8, 0, 9]])'''20、如何對數組進行去重操作?numpy的unique函數用於去除數組中的重複元素,返回一個新數組。import numpy as np# 創建一個一維數組x1 = np.array([2,3,5,1,3,8,1,0])np.unique(x1)'''輸出:array([0, 1, 2, 3, 5, 8])'''unique函數還能返回重複元素的索引、計數等信息,可去查文檔自定義參數。未完待續!

轉發關注+私信「學習即可領取Python教程」

相關焦點

  • Python數據科學Numpy基礎20問
    1、什麼是numpy?一言以蔽之,numpy是python中基於數組對象的科學計算庫。提煉關鍵字,可以得出numpy以下三大特點:2、如何安裝numpy?因為numpy是一個python庫,所以使用python包管理工具pip或者conda都可以安裝。
  • 【入門基礎】Numpy基礎20問
    一言以蔽之,numpy是python中基於數組對象的科學計算庫。提煉關鍵字,可以得出numpy以下三大特點:2、如何安裝numpy?因為numpy是一個python庫,所以使用python包管理工具pip或者conda都可以安裝。
  • python數據分析專題 (9):numpy基礎
    NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。
  • 資源|用Python和NumPy學習《深度學習》中的線性代數基礎
    本文系巴黎高等師範學院在讀博士 Hadrien Jean 的一篇基礎學習博客,其目的是幫助初學者/高級初學者基於深度學習和機器學習來掌握線性代數的概念。掌握這些技能可以提高你理解和應用各種數據科學算法的能力。
  • python數據分析:numpy入門
    微信公眾號:學點啥玩點啥小白友好型python數據分析:numpy入門numpy:一個在python中做科學計算的基礎庫,重在數值計算,也是大部分python科學計算庫的基礎庫,多用於在大型、多維數組上執行數值計算。
  • Python冬令營-Numpy 使用簡介
    source: https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial聲明:本篇推送的主要內容翻譯自:https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial
  • 好程式設計師Python培訓分享numpy簡介
    圖像處理和計算機圖形學:計算機中的圖像表示為多維數字數組。NumPy成為同樣情況下最自然的選擇。實際上,NumPy提供了一些優秀的庫函數來快速處理圖像。例如,鏡像圖像、按特定角度旋轉圖像等。 數學任務:NumPy對於執行各種數學任務非常有用,如數值積分、微分、內插、外推等。
  • Python學習第117課——numpy中dot的運用舉例
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了最基礎的matrix的運算,可能有小夥伴覺得這都要涉及高等數學知識了,確實如果你想做數據科學、做人工智慧,統計學、概率論等數學知識,尤其是算法是繞不過去的坎,但是不要怕!!!
  • Python入門教程(一):初識Numpy
    Numpy是Python中較為常用的模塊,今天我們就從Numpy的基礎應用講起,非常適合0基礎的小白哦,python系列的基礎課程也會持續更新。首先,我們在運用某個模塊之前需要先導入這個模塊。import numpynumpy.
  • python:numpy入門詳細教程
    python數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。numpy:numerical python縮寫,提供了底層基於C語言實現的數值計算庫,與python內置的list和array數據結構相比,其支持更加規範的數據類型和極其豐富的操作接口,速度也更快num
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    list VS ndarraynumpy 的核心是 ndarray 對象(numpy 數組),它封裝了 python 原生的同數據類型的 n 維數組(python 數組)。numpy 數組和 python 數組之間有幾個重要的區別:numpy 數組一旦創建,其元素數量就不能再改變了。
  • Python學習第114課——numpy中ndarray的四則運算
    【每天幾分鐘,從零入門python編程的世界!】我們為什麼要學習numpy?numpy其實就是number+Python的簡寫,意思就是通過Python對數據進行處理。這節我們學習numpy中數組的一些基本的四則運算。●numpy中數組的加法運算我們首先生成x和y兩個float類型的數組,然後把它們進行相加。
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • Python學習第119課——numpy中的broadcasting
    【每天幾分鐘,從零入門python編程的世界!】這節課我們學習numpy中的數據的一個多變的特性--broadcasting,broadcasting的官方的說明比較麻煩,我們這裡把它簡化一下,就把它當做「腦補」的意思。
  • 學習Python必知的Numpy函數
    NumPy 是一個基礎數學包,以其高效的多維數組函數而聞名,適用於線性代數,傅立葉變換,邏輯運算等。本文從 NumPy 最基礎的知識切入,包括 NumPy 裡面的函數,如何創建 NumPy 數組,數組的索引、切片等,非常適合初學者。
  • Python | Numpy簡介
    Numpy簡介python標準庫中的列表(list)可以當數組用,支持動態內存分配和垃圾收集,列表元素可以是任何對象,功能強大!兩大法寶:多維數組ndarray和通用函數ufunc如何使用Numpy等python第三方軟體包?(如何開外掛?)被import的可以是通過conda或pip安裝的包,也可以是python的path中(包括當前目錄)的其它x.py文件。
  • Python的武器庫04:numpy模塊(上)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • 如何系統地學習Python 中 matplotlib, numpy, scipy, pandas?
    Matplotlib:Python 中常用的繪圖庫,能在跨平臺的交互式環境生成高質量圖形。後來在它的基礎上又衍生了更為高級的繪圖庫 Seaborn。總的來說,如果你想理解和處理手頭的數據,就用 Pandas;如果你想執行一些複雜的計算,就用 Numpy 和 SciPy;如果你想將數據可視化,就用 Matplotlib。
  • 學員筆記||Python數據分析之:numpy入門(一)
    (點擊上方公眾號,快速關注一起學AI)這是我學<Python數據分析>時整理出來的numpy基礎速讀筆記,內容大致分為
  • Python必備基礎:這些NumPy的神操作你都掌握了嗎?
    這裡我們介紹生成ndarray的幾種方式,如從已有數據中創建;利用random創建;創建特殊多維數組;使用arange函數等。1. 從已有數據中創建直接對python的基礎數據類型(如列表、元組等)進行轉換來生成ndarray。