入門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 入門教程
    擊劍入門:各劍種打法特點與發展趨勢
    虛雲老和尚 | 禪修入門 參禪法要 四、悟道與修道

    TAG:文檔 | 解讀 | 官方 | numpy | 官方文檔 | 入門 |