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