入門numpy(上)【解讀numpy官方文檔】

前言

之前連載了pandas,pandas作為python做數據分析的一大利器,相信大家都不陌生。

當然連載部分作為入門是夠了,具體提升還要大家多看看官方文檔詳細內容和做具體項目案例

之後我也會出一些pandas的數據分析實戰案例分享給大家。

在詢問了大家的意見和建議(怎麼說的這麼官方,不是我的風格啊)之後

我決定解讀一下numpy的官方文檔(入門部分)

讓大家能夠快速上手numpy

首先,我們看看官方是怎麼介紹numpy的:

NumPy是使用Python進行科學計算的基礎軟體包。 它包含以下內容:

(1)一個強大的N維數組對象

(2)複雜(廣播)功能

(3)用於集成C / C ++和Fortran代碼的工具

(4)非常有用的線性代數,傅里葉變換和隨機數操作

(5)除了其明顯的科學用途,NumPy也可以用作通用數據的高效多維容器。 可以定義任意數據類型。 這使NumPy能夠無縫地,快速地與各種資料庫集成。

可能大家對"廣播"一詞不太了解,廣播的意思可以這樣理解,當我有兩個維度不一樣的array(數組)運算時,我可以用低維的數組複製成高維數組參與運算(因為運算要符合一定結構)

numpy官方網站:numpy.org/

開始numpy之旅

如果你是一個python初學者,我不建議你直接去python官網下載python3.X或是python2.7版本

我推薦你直接去anaconda官網下載對應版本的anaconda(建議下載最新的3.X版本)

下載地址:

continuum.io/downloads

如果你是windows用戶,直接進入官網下載下圖的即可

為什麼推薦anaconda呢?

因為anaconda是python的集成環境,自帶了很多python的庫(或者認為是包)

舉個栗子:

如果Python是一個光桿司令的話,anaconda則是一個司令帶著一堆軍隊

so,你應該知道為什麼我推薦你裝anaconda了吧

如果你已經裝了原生python並且用了挺久,也pip install 了很多庫,類似numpy,scipy,pandas

那麼你一定遇到很多報錯,恭喜你,你已經才過了很多坑啦~就像我一樣

有趣的是:

python是巨蟒的意思

anaconda是水蟒的意思

如果你在pip install numpy中由於網速慢安裝報錯,你可以來這裡下載然後本地安裝numpy

pypi.python.org/pypi/nu

numpy快速入門官方文檔:docs.scipy.org/doc/nump

環境

python3.X

一顆栗子

import numpy as np

如果沒報錯,恭喜你,numpy安裝完成

這裡是把numpy命名為np

可以說是行業潛規則,當然是為了之後寫代碼簡寫方便

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

註:這裡的array(數組)是numpy中特有的類型,首先,使用np.arange(15)產生了一個一維數組,從0-14(注意範圍)

arange不是arrange,arange是numpy的方法,所以寫為np.arange()

然後,使用reshape()方法將這個產生的數組重新造型為3行5列的二維數組,也就有了上圖的樣子。

a.shape

註:查看數組格式,顯示三行五列

a.ndim

註:顯示數組的維數

如果你想知道這個方法的含義,可以在jupyter notebook (裝完anaconda自帶的ide編輯器)里輸入:

?np.dim

還有舉例子幫你理解呢~

a.dtype.name

註:a數組中的數值類型

a.itemsize

註:每個數組元素的位元組大小

a.size

註:a數組中的元素個數

type(a)

註:a的類型

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

註:當然,你可以直接通過直接賦值創建一個數組

type(b)

創建數組

使用array方法直接通過list(列表)創建數組

import numpy as npa = np.array([2,3,4])a

a.dtype

b = np.array([1.2, 3.5, 5.1])b.dtype

註:可以創建整形和浮點型元素的數組

常見錯誤:沒有經過list直接用數列創建數組

b = np.array([(1.5,2,3), (4,5,6)])b

註:創建二維數組

當然,創建數組的時候,也可以指明類型:

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

註:這裡指定的是複數類型

np.zeros( (3,4) )

註:創建全零數組,默認為float64形式

np.ones( (2,3,4), dtype=np.int16 )

註:創建一個三維全1的數組,並且創建時指定類型

你可以認為是一個長方體里有序的充滿了1

觀察括弧,有層次的

np.empty( (2,3) )

註:創建一個二維的空數組,電腦不同導致顯示不同

使用arange創建array

np.arange( 10, 30, 5 )

註:產生一個起始值為10,終止值為30(注意,終止值取不到),步長為5的數組

有點像c語言中的for循環格式

np.arange( 0, 2, 0.3 )

註:這裡想說它接受float的值,不僅僅是int類型的值

當使用浮點參數時,由於有限的浮點精度,通常不可能預測獲得的元素的數量。

因此,通常最好使用函數linspace來接收我們想要的元素的數量作為參數,而不是使用步長參數:

from numpy import pinp.linspace( 0, 2, 9 )

註:產生0到2之間等間距(步長)的9個元素的數組,linspace和matlab中的用法一樣

x = np.linspace( 0, 2*pi, 100 )f = np.sin(x)f

註:在之前import了pi(π),現在相當於在0~2pi之間產生100個均勻的數字作為x

然後通過sin(x)算出對應的y,部分結果如下:

更詳細的操作可以在這裡看:docs.scipy.org/doc/nump

就是下圖這裡,鏈接太多,就不一個個弄出來了

顯示數組

a = np.arange(6)print(a)

註:列印一維數組

b = np.arange(12).reshape(4,3)print(b)

註:列印二維數組

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

註:列印三維數組

更多reshape方法可以看這裡:docs.scipy.org/doc/nump

如果數組太大而無法全部列印,NumPy會自動跳過中央部分,只能列印出邊界部分(首尾):

print(np.arange(10000))

print(np.arange(10000).reshape(100,100))

要禁用此省略並強制NumPy列印整個數組,您可以使用set_printoptions更改列印選項。

np.set_printoptions(threshold=nan)

基本操作

a = np.array( [20,30,40,50] )b = np.arange( 4 )b

c = a-bc

註:數組相減

b**2

註:b數組中每個元素平方

10*np.sin(a)

註:a數組先進行sin運算,然後結果乘10

a<35

註:對a數組中每個元素和35進行比較大小,返回的是一個充滿布爾元素的數組

數組的矩陣乘法和對應元素乘積方法:

原理參考線性代數

A = np.array( [[1,1], [0,1]] )B = np.array( [[2,0], [3,4]] )

註:創建兩個數組(矩陣)

A*B

註:對應元素相乘

A.dot(B)

註:A左乘B,也可以寫成如下形式:

np.dot(A, B)

結果一樣的

A左乘B 和 B左乘A是不一樣的,詳見線性代數課本

某些操作(例如+ =和* =)將作用於修改現有數組而不是創建新的數組:

a = np.ones((2,3), dtype=int)b = np.random.random((2,3))a *= 3a

註:創建一個2行3列全是元素1的數組a,然後將a的元素都乘3

小插曲:

(1)

num = 1num = num + 1num

(2)

num = 1num += 1num

初學者可以認為以上兩種一樣的意思,其實不一樣,等你自己慢慢去挖掘。

同理以下也是:

num -= 1num *= 1num /= 1

回到正題:

b += ab

相當於b = b+a

註:這裡要說的是以上操作是修改現有數組而不是創建新的數組!!!

所以有時候盡量先備份一個

易錯點:

這裡a是int類型,b是float類型:

運算時,一般是可以默認自動從int到float轉換(從簡單到複雜)

而你的a = a+b相當於將float轉為int,所以報錯了

未完待續~近期更新~謝謝觀賞~希望對你學習有幫助~

作者:王大偉 Python愛好者社區唯一小編,請勿轉載,謝謝。

出處:入門numpy(上)【解讀numpy官方文檔】

配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享

公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。

加小編個人微信:tsdatajob ,跟作者互動,一起探討。

推薦閱讀:

新手Python,如何系統的學習Python智能演算法?
怎樣搭建基於 Python 的科學計算、數據處理環境?
python爬蟲如何深入學習?
<python/php>關於千萬級別數量的數據轉移更好的方案?
請問python theano中的shared variable是指什麼意思?

TAG:Python | Python库 | Python教程 |