入門numpy(上)【解讀numpy官方文檔】
前言
之前連載了pandas,pandas作為python做數據分析的一大利器,相信大家都不陌生。
當然連載部分作為入門是夠了,具體提升還要大家多看看官方文檔詳細內容和做具體項目案例
之後我也會出一些pandas的數據分析實戰案例分享給大家。
在詢問了大家的意見和建議(怎麼說的這麼官方,不是我的風格啊)之後
我決定解讀一下numpy的官方文檔(入門部分)
讓大家能夠快速上手numpy
首先,我們看看官方是怎麼介紹numpy的:
NumPy是使用Python進行科學計算的基礎軟體包。 它包含以下內容:
(1)一個強大的N維數組對象
(2)複雜(廣播)功能
(3)用於集成C / C ++和Fortran代碼的工具
(4)非常有用的線性代數,傅里葉變換和隨機數操作
(5)除了其明顯的科學用途,NumPy也可以用作通用數據的高效多維容器。 可以定義任意數據類型。 這使NumPy能夠無縫地,快速地與各種資料庫集成。
可能大家對"廣播"一詞不太了解,廣播的意思可以這樣理解,當我有兩個維度不一樣的array(數組)運算時,我可以用低維的數組複製成高維數組參與運算(因為運算要符合一定結構)
numpy官方網站:http://www.numpy.org/
開始numpy之旅
如果你是一個python初學者,我不建議你直接去python官網下載python3.X或是python2.7版本
我推薦你直接去anaconda官網下載對應版本的anaconda(建議下載最新的3.X版本)
下載地址:
https://www.continuum.io/downloads
如果你是windows用戶,直接進入官網下載下圖的即可
為什麼推薦anaconda呢?
因為anaconda是python的集成環境,自帶了很多python的庫(或者認為是包)
舉個栗子:
如果Python是一個光桿司令的話,anaconda則是一個司令帶著一堆軍隊
so,你應該知道為什麼我推薦你裝anaconda了吧
如果你已經裝了原生python並且用了挺久,也pip install 了很多庫,類似numpy,scipy,pandas
那麼你一定遇到很多報錯,恭喜你,你已經才過了很多坑啦~就像我一樣
有趣的是:
python是巨蟒的意思
anaconda是水蟒的意思
如果你在pip install numpy中由於網速慢安裝報錯,你可以來這裡下載然後本地安裝numpy
https://pypi.python.org/pypi/numpy#downloads
numpy快速入門官方文檔:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
環境
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,部分結果如下:
更詳細的操作可以在這裡看:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
就是下圖這裡,鏈接太多,就不一個個弄出來了
顯示數組
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方法可以看這裡:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#quickstart-shape-manipulation
如果數組太大而無法全部列印,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是指什麼意思?