入門numpy(25﹪-50﹪)【解讀numpy官方文檔】
作者:王大偉
博客專欄:https://www.hellobi.com/u/wangdawei/articles
Python愛好者社區 唯一小編
前言
最近在學習入門python可視化,先後初步探索了seaborn、matplotlib、plotly和ggplot
發現還是pandas的繪圖最容易上手,樣式也很商務化,學完官方文檔之後和大家一起分享
言歸正傳,今天繼續連載numpy入門系列
前文傳送門:https://ask.hellobi.com/blog/wangdawei/8708
基本操作當使用不同類型的數組時,結果得到的數組的類型對應於更一般或精確的數組(稱為upcasting的行為)。
import numpy as npfrom numpy import pi
註:從numpy中導入pi(π)
a = np.ones(3, dtype=np.int32)a
註:創建一個一行三列的矩陣(元素都是1)
b = np.linspace(0,pi,3)b.dtype.name
註:在0-π之間均勻產生三個等間隔的數字,b的類型是浮點型
c = a bc
c.dtype.name
註:得到的c的類型為浮點型
d = np.exp(c*1j)d
d.dtype.name
註:得到的是複數
許多一元操作,例如計算數組中所有元素的總和,都被實現為ndarray類的方法
a = np.random.random((2,3))a
註:產生2行3列的隨機數組(元素值為0-1之間的隨機數)
a.sum()
註:將a數組所有元素求和
a.min()
註:返回a數組中最小的元素值
a.max()
註:返回a數組中的最大值
注意:我們看到的數組和單獨取出的最大值保留的小數位數不同
默認情況下,這些操作適用於數組,就像它是數字列表一樣,不管其形狀如何。 但是,通過指定軸參數,您可以沿著數組的指定軸應用一個操作:
b = np.arange(12).reshape(3,4)b
註:通過reshape將產生的1行的數組轉變為3行4列
b.sum(axis=0)
註:將每一列求和,因為指定了參數axis = 0
b.sum(axis=1)
註:按行求和
b.sum()
註:不加axis參數則是所有元素求和
b.min(axis=1)
註:求每行的最小值
b.cumsum(axis=1)
註:要學會自己查幫助文件
?b.cumsum(axis=1)
是返回沿給定軸的元素的累加和
這是什麼意思呢?畫個圖很好理解:
就是把前面所有的加上自己當前的值得到的結果放在當前位置,就是數列前n項累加和的意思
注意這裡是按行累加
通用功能NumPy提供熟悉的數學函數,如sin,cos和exp。 在NumPy中,這些被稱為「通用函數」(ufunc)。 在NumPy中,這些函數在數組上以元素方式運算,產生一個數組作為輸出。
B = np.arange(3)B
註:創建一個數組
np.exp(B)
註:對每個元素求e的某次方
np.sqrt(B)
註:對每個元素開方
C = np.array([2., -1., 4.])np.add(B, C)
註:將兩個數組相加(要求數組形狀相同)
如果形狀不同,則會報錯如下:
查看這部分更多更詳細的用法可以看:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
下圖部分:
索引,切片和迭代
一維數組可以被索引,切片和迭代,非常像列表和其他Python序列。
a = np.arange(10)**3a
註:對數組中每個元素求3次方
a[2]
註:取出序列為2的元素
a[2:5]
註:切片操作
a[:6:2] = -1000 a
註: 和 a[0:6:2] = -1000相同; 從最初到序列號6(6取不到),步長為2,將-1000賦值相應的元素。
a[ : :-1]
註:數組元素逆序排列
for i in a: print(i**(1/3.))
註:對a數組中每個元素,求1/3次方
結果是nan的我有些不解,-10的3次方不是-1000么
於是我試了試:
希望有了解的大神留言評論指導一下,這個nan暫時跳過吧
多維數組每條軸可以有一個索引。 這些索引以逗號分隔的元組給出:
def f(x,y): return 10*x y
註:定義一個函數,參數有兩個:x,y
b = np.fromfunction(f,(5,4),dtype=int)b
註:我們看一下幫助:
?np.fromfunction
指的是,建立5行4列的數組,然後對每個位置元素(i,j)索引代表位置,例如(2,3)位置時,
計算函數值10*2 3=13,所以返回13,其他同理。
b[2,3]
註:我們可以取出數組中的元素值,注意行和列索引是用逗號分隔,而不是冒號(冒號是切片)
b[0:5, 1]
註:按照下標索引切片
b[ : ,1]
註:按照下標索引切片
b[1:3, : ]
註:按照下標索引切片
b[-1]
註:這個相當於b[-1,:]
一些省略記法:
例如五維的數組:
x[1,2,...]與x[1,2,:,:,:]等價
x[...,3]與x[:,:,:,:,3]等價
x[4,...,5,:]與x[4,:,:,5,:]等價
c = np.array( [[[ 0, 1, 2], [ 10, 12, 13]], [[100,101,102], [110,112,113]]])
c.shape
註:這是一個三維數組,並顯示行、列、高的信息
c[1,...]
註:等同於c[1,:,:] 或c[1],有點像切蛋糕的感覺,切出一片二維的。
c[...,2]
註:等同於c[:,:,2]、
相對於第一軸完成多維數組迭代:
for row in b: print(row)
註:有點像三位數組降維成多個一維的感覺
但是,如果要對數組中的每個元素執行操作,可以使用flat屬性,該屬性是數組的所有元素的迭代器:
for element in b.flat: print(element)
註:這是取出多維數組中所有元素的一個不錯方法
查看這部分更多更詳細的用法可以看:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
下圖部分:
對形狀操作
改變數組的形狀
a = np.floor(10*np.random.random((3,4)))a
注:通過?np.floor()
我們只到,該方法是向下取整的意思
例如:
num = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])np.floor(num)
向下取整就是指一個數字往減小的方向取到最近的值,例如上面例子的-1.7變成-2.0
所以這是產生隨機整數的方法,但這裡的數字是float不是int類型
可以通過各種命令改變陣列的形狀。 請注意,以下三個命令都返回一個修改的新數組,不更改原始數組:
a.ravel()
註:將數組改成一維
a.reshape(6,2)
註:將數組轉化為指定形狀
a.T
註:數組轉置,和矩陣轉置一樣理解
a.T.shape
矩陣轉置之後的形狀
a.shape
註:原來矩陣的形狀
至此,numpy入門完成了一半,還有兩篇完結,之後咱寫可視化吧,哈哈~
未完待續~近期更新~謝謝觀賞~希望對你學習有幫助~
關注公眾號,「Python愛好者社區」,回復「爬蟲」即可獲取崔老師爬蟲免費學習視頻。
Python愛好者社區為大家提供與Python相關的最新技術和資訊。
推薦閱讀:
※出口流程查詢---入門
※梅花易數預測術入門課程,背會四節課就會
※Flex 入門教程
※擊劍入門:各劍種打法特點與發展趨勢
※虛雲老和尚 | 禪修入門 參禪法要 四、悟道與修道