從numpy開啟Python數據科學之旅

2021-03-02 機器學習實驗室

   

 

    目前小編的Python學習是按照兩個路徑在一路往下推,希望藉此改變過去大半年的Python一直在入門的狀態。一個路徑就是從純程式語言的角度來學習Python的,包括Python編程基礎、編寫函數、Python高級特性、函數式編程、面向對象編程、多進程和多線程、常用內建模塊和第三方庫等等,旨在學習和鍛鍊編程思維,提高小編自身的coding能力。另一個路徑是按照數據科學的角度來學習Python,這條路徑是想將R語言的數據處理和分析能力搬到Python上,主要是學習一些可用於數據分析的Python庫,包括NumPy、Pandas、SciPy、Matplotlib、Seaborn和scikit-learn等等。

    第一個路徑學習所使用的資料是廖雪峰老師Python3教程 廖雪峰Python3教程 。

    第二個路徑的學習資料主要來自Python的幫助文檔和Wes McKinney的Python for Data Analysis 一書。各位看官可自行去網上尋找一下這本Python數據分析入門書籍。 先簡單介紹了下小編學習Python主要方法和參考資料,很明顯今天的主題numpy是屬於第二個路徑的內容,下面就開始進入今天的正題。

NumPy簡介

    NumPy是Python中科學計算庫,其主要對象是包含同種元素的多維數組。在NumPy中數組的維度也叫做軸(axis),軸的個數叫做秩(rank)。小編在這裡有必要跟大家提醒一下,線性代數真的是一門很重要的數學基礎課程,認真學好並精通真的是太重要了。

    本文小編主要從如何利用numpy創建一個數組對象、列印數組、numpy對象的基本運算和線性代數運算、數組的索引與切片、變換數組形狀等方面來介紹numpy。

創建一個numpy對象

    利用numpy創建數組對象方法很多,但最常用的還是 array方法和 arange方法。 先看利用 arange方法創建的數組對象:

#arange方法創建一個數組

import numpy as np

a = np.arange(15).reshape(3,5)

a

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

      [ 5,  6,  7,  8,  9],

      [10, 11, 12, 13, 14]])

#arange()創建數組的另一種方式

np.arange(10,30,5)

array([10, 15, 20, 25])

    再看 array方法:

#array方法創建一個數組

b = np.array([6,7,8])

b

array([6, 7, 8])

    對創建後的數組對象可以查看一些屬性:

#查看數組維度

a.shape

(3, 5)

#查看數組軸的個數

a.ndim

2

#查看數組對象元素類型

a.dtype

dtype('int32')

#查看對象類型

type(a)

numpy.ndarray

type(b)

numpy.ndarray

    可以看到numpy數組類為ndarray。 我們也可以在創建數組的時候就指定元素類型:

#在數組創建時就指定dtype

c = np.array([[1,2],[3,4]], dtype = complex)

c

array([[ 1.+0.j,  2.+0.j],

      [ 3.+0.j,  4.+0.j]])

    還可以利用一些基礎函數來創建數組:

#創建全零矩陣

np.zeros((3,4))

array([[ 0.,  0.,  0.,  0.],

      [ 0.,  0.,  0.,  0.],

      [ 0.,  0.,  0.,  0.]])

#創建全一矩陣

np.ones((3,4))

array([[ 1.,  1.,  1.,  1.],

      [ 1.,  1.,  1.,  1.],

      [ 1.,  1.,  1.,  1.]])

列印數組

    從上面的演示大家應該也可以看到,在Python中直接輸入數組對象後返回的是一個帶有array字樣的對象,但使用 print函數對數組對象進行列印顯示的結果就不會有這個字樣了:

#一維數組列印成行

x = np.arange(5)

print(x)

[0 1 2 3 4]

#二維數組列印成矩陣

y = np.arange(10).reshape(2,5)

print(y)

[[0 1 2 3 4]

[5 6 7 8 9]]

#三維數組列印成矩陣列表

z = np.arange(24).reshape(2,3,4)

print(z)

[[[ 0  1  2  3]

 [ 4  5  6  7]

 [ 8  9 10 11]]

[[12 13 14 15]

 [16 17 18 19]

 [20 21 22 23]]]

數組的基本運算

    既然numpy是科學計算庫,它的進行一些計算也是非常強大的:

#numpy數組對象是按照對應進行運算的

a = np.array([10,20,30,40])

b = np.arange(10,30,5)

c = a - b

c

array([ 0,  5, 10, 15])

b ** 2

array([100, 225, 400, 625], dtype=int32)

a < 35

array([ True,  True,  True, False], dtype=bool)

#numpy中*按元素進行運算,矩陣乘法使用dot函數

a = np.array([[1,1],[0,1]])

b = np.array([[2,0],[3,4]])

a * b

array([[2, 0],

      [0, 4]])

np.dot(a,b)

array([[5, 4],

      [3, 4]])

    可見,Python矩陣的計算採用的是點乘的方式,跟matlab較為相似。 除了直接的四則運算,還可以複雜一點:

#*=/+=等符號用來更改已存在的數組而不是創建一個新的數組

a *= 3

a

array([[3, 3],

      [0, 3]])

b += a #b=b+a

b

array([[ 8,  6],

      [ 3, 10]])

#axis參數對數組指定軸進行運算

c = np.arange(12).reshape(3,4)

c

array([12, 15, 18, 21])

#對數組每行取最小值

c.min(axis = 1)

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

      [ 4,  5,  6,  7],

      [ 8,  9, 10, 11]])

#對數組每列進行求和計算

c.sum(axis = 0)

array([12, 15, 18, 21])

#numpy也提供一些通用的數學計算函數

b = np.arange(5)

np.exp(b)

array([  1.        ,   2.71828183,   7.3890561 ,  20.08553692,  54.59815003])

np.sqrt(b)

array([  1.        ,   2.71828183,   7.3890561 ,  20.08553692,  54.59815003])

    利用numpy進行線性代數運算也是非常方便的:

import numpy as np

from numpy.linalg import *

a = np.array([[1,2],[3,4]])

print(a)

[[1 2]

[3 4]]

#求轉置

a.transpose()

array([[1, 3],

      [2, 4]])

#求逆

inv(a)

array([[-2. ,  1. ],

      [ 1.5, -0.5]])

#生成單位陣

np.eye(3)

array([[ 1.,  0.,  0.],

      [ 0.,  1.,  0.],

      [ 0.,  0.,  1.]])

#求跡

np.trace(a)

5

#求解矩陣方程

y = np.array([[5],[7]])

solve(a,y)

array([[-3.],

      [ 4.]])

    關於numpy的簡單運算小編就例舉這麼多,細加探索numpy遠比你想像的要強大。

數組對象的索引與切片

    關於切片的知識,小編在之前的Python學習的第一條路徑中就已介紹過了,主要是針對list和tuple對象,將索引和切片應用在數組上也是非常方便的。

a = np.arange(10)**2

a

array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81], dtype=int32)

#訪問一個數

a[3]

9

#訪問一串數

a[2:5]

array([ 4,  9, 16], dtype=int32)

#按索引替換元素

a[:6:2] = 2017

a

array([2017,    1, 2017,    9, 2017,   25,   36,   49,   64,   81], dtype=int32)

#給數組反向呈現

a[::-1]

array([  81,   64,   49,   36,   25, 2017,    9, 2017,    1, 2017], dtype=int32)

#多維數組對每個軸都可以進行索引

def f(x,y):

   return x*3+2*y

b = np.fromfunction(f,(5,4),dtype = int)

b

array([[ 0,  2,  4,  6],

      [ 3,  5,  7,  9],

      [ 6,  8, 10, 12],

      [ 9, 11, 13, 15],

      [12, 14, 16, 18]])

b[2,3]

12

b[0:5,1]

array([ 2,  5,  8, 11, 14])

#當少於軸數的索引被提供時,則被默認為取整個切片

b[-1]

array([12, 14, 16, 18])

更改數組形狀

    最後一個需要給大家介紹的是對數組形狀進行更改:

a = np.arange(10,110,10).reshape(2,5)

a

array([[ 10,  20,  30,  40,  50],

      [ 60,  70,  80,  90, 100]])

a.shape

(2, 5)

#展開數組

a.ravel()

array([ 10,  20,  30,  40,  50,  60,  70,  80,  90, 100])

#reshape函數僅改變參數形狀,而resize函數則改變數組本身

a.resize(5,2)

a

array([[ 10,  20],

      [ 30,  40],

      [ 50,  60],

      [ 70,  80],

      [ 90, 100]])

    可見reshape方法與resize方法還是有著本質的區別。

numpy總結

1.創建數組 arange, array, copy, empty, emptylike, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, oneslike, r , zeros, zeros_like 

2.轉化 astype, atleast 1d, atleast 2d, atleast 3d, mat 

3.操作 array split, column stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack 

4.詢問 all, any, nonzero, where 

5.排序 argmax, argmin, argsort, max, min, ptp, searchsorted, sort 

6.運算 choose, compress, cumprod, cumsum, inner, fill, imag, prod, put, putmask, real, sum 

7.基礎統計和線性代數 cov, mean, std, var, cross, dot, outer, svd, vdot, eye, transpose, inv, trace

參考資料:

http://www.numpy.org/



往期精彩:

gganimate:構建R語言可視化gif動圖

使用jupyter notebook搭建數據科學最佳交互式環境

R編程特性1:向量與向量化

R Markdown|可能是你數據分析報告最好的解決方案

如何寫出整潔規範的R代碼?是時候討論一下代碼規範性了

R語言向量化運算:apply函數族用法心得

Python面向對象編程:數據封裝、繼承和多態

[譯]為什麼R語言是當今最值得學習的數據科學語言

一個數據科學熱愛者的學習歷程



相關焦點

  • Python數據科學Numpy基礎20問
    1、什麼是numpy?一言以蔽之,numpy是python中基於數組對象的科學計算庫。提煉關鍵字,可以得出numpy以下三大特點:2、如何安裝numpy?因為numpy是一個python庫,所以使用python包管理工具pip或者conda都可以安裝。
  • python數據科學系列:numpy入門詳細教程
    python數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。numpy:numerical python縮寫,提供了底層基於C語言實現的數值計算庫,與python內置的list和array數據結構相比,其支持更加規範的數據類型和極其豐富的操作接口,速度也更快numpy的兩個重要對象是
  • python數據分析專題 (9):numpy基礎
    NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。
  • python數據分析:numpy入門
    微信公眾號:學點啥玩點啥小白友好型python數據分析:numpy入門numpy:一個在python中做科學計算的基礎庫,重在數值計算,也是大部分python科學計算庫的基礎庫,多用於在大型、多維數組上執行數值計算。
  • Python冬令營-Numpy 使用簡介
    Numpy 簡介: 使用python進入數據科學的世界!
  • Python數據分析 - Numpy
    如今,np被Python其它科學計算包作為基礎包,已成為Python 數據分析的基礎,可以說,NP是SciPy、Pandas等數據處理或科學計算庫最基本的函數功能庫。因此,理解np的數據類型對python數據分析十分有幫助。下面,本文將介紹Np的常用操作和基本數據類型。NP提供了以下重點功能。
  • 數據分析-numpy庫快速了解
    1.numpy是什麼庫NumPy是一個開源的Python科學計算基礎庫,包含: 一個強大的N維數組對象 ndarray 廣播功能函數 整合C/C++/Fortran代碼的工具 線性代數、傅立葉變換、隨機數生成等功能
  • python數據分析專題 (7):python數據分析模塊
    也就是這些python的擴展包讓python可以做數據分析,主要包括numpy,scipy,pandas,matplotlib,scikit-learn等等諸多強大的模塊,在結合上ipython交互工具 ,以及python強大的爬蟲數據獲取能力,字符串處理能力,讓python成為完整的數據分析工具。
  • 學員筆記||Python數據分析之:numpy入門(一)
    (點擊上方公眾號,快速關注一起學AI)這是我學<Python數據分析>時整理出來的numpy基礎速讀筆記,內容大致分為
  • 數據科學|可視化圖解Python科學計算包Numpy
    NumPy包是python生態系統中數據分析、機器學習和科學計算的主力。它極大地簡化了向量和矩陣的操作。Python的一些主要軟體包依賴於NumPy作為其基礎架構的基礎部分(例如scikit-learn、SciPy、pandas和tensorflow)。
  • Python之numpy零基礎入門(一)
    )import numpy as npa=[1,2,3,4,5,6]arr=np.array(a)print(arr)print(arr.shape)print(arr.dtype)arange函數類似於python的內置函數range,但arange函數主要用於創建數組
  • Python學習第114課——numpy中ndarray的四則運算
    【每天幾分鐘,從零入門python編程的世界!】我們為什麼要學習numpy?numpy其實就是number+Python的簡寫,意思就是通過Python對數據進行處理。要對數據進行處理,就少不了最基本的加減乘除等操作。這節我們學習numpy中數組的一些基本的四則運算。●numpy中數組的加法運算我們首先生成x和y兩個float類型的數組,然後把它們進行相加。
  • 如果必須重新開始,我會怎樣開啟自己的數據科學之旅?
    本科學的是經濟學,我從商業學位的課程中學習到了商業敏銳度;碩士學位是全球商業和計算機科學(方向是機器學習和人工智慧),計算機科學學位的課程中教會我大部分的技術要素,並且我還擁有一份數據科學的實習。回顧過去,我的道路沒有任何問題,但是,如果當時我就知道自己現在正在做什麼,我將會如何規劃自己的數據科學之旅呢?這個問題對於剛接觸該領域的人來說特別重要。
  • Python 數據分析:Numpy 介紹
    如今,np被Python其它科學計算包作為基礎包,已成為Python 數據分析的基礎,可以說,NP是SciPy、Pandas等數據處理或科學計算庫最基本的函數功能庫。因此,理解np的數據類型對python數據分析十分有幫助。下面,本文將介紹Np的常用操作和基本數據類型。NP提供了以下重點功能。
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • 好程式設計師Python培訓分享numpy簡介
    NumPy數組用於存儲訓練數據和機器學習模型的參數。 圖像處理和計算機圖形學:計算機中的圖像表示為多維數字數組。NumPy成為同樣情況下最自然的選擇。實際上,NumPy提供了一些優秀的庫函數來快速處理圖像。例如,鏡像圖像、按特定角度旋轉圖像等。 數學任務:NumPy對於執行各種數學任務非常有用,如數值積分、微分、內插、外推等。
  • Python學習第117課——numpy中dot的運用舉例
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了最基礎的matrix的運算,可能有小夥伴覺得這都要涉及高等數學知識了,確實如果你想做數據科學、做人工智慧,統計學、概率論等數學知識,尤其是算法是繞不過去的坎,但是不要怕!!!
  • 從零開始學Python數據分析【4】-- numpy
    作者:劉順祥個人微信公眾號:每天進步一點點2015前文傳送門:從零開始學Python數據分析
  • 學習Python必知的Numpy函數
    背景Python的數據科學以分析為主。大量的擴展包是 Python 的一大特色,包括各種適用於數據分析的例程和函數。
  • python數據分析專題 (10):numpy使用
    NumPy的ndarry類型也可以進行很多操作,例如數組的索引,組合等,這次內容介紹一些關於numpy多維數組的操作。