&關(guān)于計(jì)劃:
一舱卡、Numpy庫的學(xué)習(xí)(學(xué)習(xí)完畢)蕉扮;
二运挫、Matplotlib的學(xué)習(xí)(進(jìn)行中迟几,預(yù)計(jì)13周之內(nèi)完成)身辨;
三蔽挠、Markdown的學(xué)習(xí)(進(jìn)行中)盒蟆;
(本文內(nèi)容參考于簡書教程)
&時(shí)間:第12周
&內(nèi)容摘要:
一接奈、
1.當(dāng)我們對(duì)數(shù)組進(jìn)行操作的時(shí)候咐柜,我們需要注意一個(gè)很重要的概念——復(fù)制和視圖
(1)完全不復(fù)制:(一個(gè)數(shù)據(jù)域兼蜈,一個(gè)數(shù)組對(duì)象,多個(gè)名字)
①簡單的賦值不會(huì)創(chuàng)建數(shù)組對(duì)象或其數(shù)據(jù)的拷貝:
>>> import numpy as np
>>> a = np.arange(12)
>>> b = a? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #沒有創(chuàng)建新的對(duì)象
>>> b is a? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #a 和 b是同一數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 組對(duì)象的兩個(gè)名字
True
>>> b.shape = 3,4? ? ? ? ? ? ? ? ? ? #改變b的形狀(同? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 時(shí)改變b的形狀——因?yàn)閍? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 和 b引用同一數(shù)組對(duì)象)
>>> a.shape
(3, 4)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #(a和b完全相通)
②Python將引用對(duì)象作為引用傳遞拙友,因此函數(shù)調(diào)用不會(huì)復(fù)制
>>> def g(x):
... print(id(x))
...
>>> id(a)
2339740615344
>>> g(a)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #同樣的饭尝,a 和 x是? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 同一數(shù)組對(duì)象的兩個(gè)名字
2339740615344
(2)視圖或淺復(fù)制:(一個(gè)數(shù)據(jù)域,不同數(shù)組對(duì)象献宫,共享相同數(shù)據(jù)域)
不同的數(shù)組對(duì)象可以共享相同的數(shù)據(jù)钥平。
①view()方法創(chuàng)建一個(gè)新數(shù)組對(duì)象,該對(duì)象看到相同的數(shù)據(jù)姊途。
>>> c = a.view()
>>> c is a? ? ? ? ? ? ? ? ? ? ? #c不是a涉瘾,是新的數(shù)組對(duì)象
False
>>> c.base is a
? ? ? ? ? ? ? ? ? ? ? ? ? #c是以a的數(shù)據(jù)為基礎(chǔ)建立的對(duì)象
True
>>> c.flags.owndata
False
>>> c.shape = 2,6? ? ? #!a的形狀不會(huì)(隨C改變)
>>> a.shape
(3, 4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> c[0,4] = 1234
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #a的數(shù)據(jù)會(huì)隨c改變(因?yàn)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 它們共享數(shù)據(jù))
>>> a
array([[ 0, 1, 2, 3],
[1234, 5, 6, 7],
[ 8, 9, 10, 11]])
? ? ? ? ? ? ? ? ? ? ? ? ? ? #(a和c唯數(shù)據(jù)相通捷兰,形狀獨(dú)立)
Ps:一個(gè)易錯(cuò)點(diǎn):
>>> e = d.view()
>>> e.base is d
True
>>> d.base is e
False
②對(duì)數(shù)組切片返回一個(gè)視圖:
>>> s = a[:,1:3] #a[1:3]->取第一個(gè)和第二個(gè)元素立叛;a[:,1:3]取第一和第二列元素
>>> s[:] = 10 #對(duì)s(作為a的視圖)賦值,a隨之改變(s和a共享數(shù)據(jù))
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
(3)深復(fù)制:(數(shù)據(jù)和數(shù)據(jù)對(duì)象贡茅,完全復(fù)制到另一個(gè)名字下)
copy方法生成數(shù)組及其數(shù)據(jù)的完整拷貝
>>> d = a.copy()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #新對(duì)象d
>>> d is a? ? ? ? ? ? ? #d和a是兩個(gè)獨(dú)立無相關(guān)對(duì)象
False
>>> d.base is a? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)不共享
False
>>> d
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
>>> d[0,0] = 9999
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
>>> d
array([[9999, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
2.用imag方法操作數(shù)組的虛部
>>> a = np.array([1+2j, 3+4j, 5+6j]) #構(gòu)造復(fù)數(shù)數(shù)組
>>> a.imag
array([ 2., 4., 6.]) #數(shù)組形式返回a的各元素虛部
>>> a.imag = np.array([8,10,12]) #數(shù)組形式對(duì)a的各元素虛部賦值
>>> a
array([ 1. +8.j, 3.+10.j, 5.+12.j])
3.花式索引和索引技巧
(1)使用索引數(shù)組索引
A.
>>> a = np.arange(12)**2
>>> a
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121], dtype=int32)
>>> i = np.array([2,2,6,8,7]) #作為一個(gè)存儲(chǔ)position的數(shù)組
>>> a[i]? ? ? ? ? ? ? ? ? ? ? ? ? ? #把單子i拿過來按圖索驥
array([ 4, 4, 36, 64, 49], dtype=int32)
>>> j = np.array([[3,4],[8,9]])
>>> a[j]
array([[ 9, 16],
[64, 81]], dtype=int32)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #對(duì)應(yīng)position和data返回矩陣
B.多維度索引
>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> i = np.array([[0,1],
... [1,2]])? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #構(gòu)建索引位置矩陣
>>> a[i]? ? ? ? ? ? ? ? ? #對(duì)應(yīng)i的內(nèi)容和形式返回矩陣
array([[[ 0, 1, 2, 3],? ? ? ? ? ? ? ? ? ? ? ? ? #a的第0個(gè)元素
[ 4, 5, 6, 7]],? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #a的第1個(gè)元素
[[ 4, 5, 6, 7],? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #a的第1個(gè)元素
[ 8, 9, 10, 11]]])? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #a的第2個(gè)元素
>>> a[i,2] #a[i]索引返回的數(shù)組中秘蛇,取每一個(gè)元素的2位置的數(shù)出來再構(gòu)造一個(gè)數(shù)組
array([[ 2, 6],
[ 6, 10]])
>>> j = np.array([[2,1],
... [3,3]])
>>> a[i,j] #i的n位結(jié)合j的n位構(gòu)成一個(gè)索引坐標(biāo),在a
中按圖索驥顶考!注意此處i和j的形狀要一樣
array([[ 2, 5],? ? ? ? ? ? ? ? #例如赁还,(i[0],j[0])=(0,2),則? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a[0,2]->2;接著a[1,1]->5,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 以此類推
[ 7, 11]])
>>> a[:,j]
array([[[ 2, 1],
[ 3, 3]], #a的第一個(gè)元素的j數(shù)組對(duì)應(yīng)位置
[[ 6, 5],
[ 7, 7]], #a的第二個(gè)元素的j數(shù)組對(duì)應(yīng)位置
[[10, 9],
[11, 11]]]) #a的第三個(gè)元素的j數(shù)組對(duì)應(yīng)位置
(2)使用布爾數(shù)組索引(可以非常方便地察看驹沿、選擇數(shù)據(jù))
>>> import numpy as np
>>> a = np.arange(12).reshape(3,4)
>>> b = a > 4
>>> b
array([[False, False, False, False],
[False, True, True, True],
[ True, True, True, True]], dtype=bool)
>>> a[b]
array([ 5, 6, 7, 8, 9, 10, 11])
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a[b] = 0
>>> a
array([[0, 1, 2, 3],
[4, 0, 0, 0],
[0, 0, 0, 0]])
4.好玩的ix_()函數(shù)(可以用于組合不同的向量艘策,便于向量運(yùn)算)
>>> import numpy as np
>>> a = np.array([2,3,4,5])
>>> b = np.array([8,5,4])
>>> c = np.array([5,4,6,8,3])
>>> ax,bx,cx = np.ix_(a,b,c) #用ix_()函數(shù)組合向量
>>> ax
array([[[2]],
[[3]],
[[4]],
[[5]]])
>>> bx
array([[[8],
[5],
[4]]])
>>> cx
array([[[5, 4, 6, 8, 3]]])
>>> ax.shape, bx.shape, cx.shape #組合完畢,向量各占一元
((4, 1, 1), (1, 3, 1), (1, 1, 5))
>>> result = ax+bx*cx
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #將完成組合的向量加以? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 運(yùn)算渊季,得到的結(jié)果矩陣存儲(chǔ)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 給數(shù)組對(duì)象
>>> result
array([[[42, 34, 50, 66, 26],
[27, 22, 32, 42, 17],
[22, 18, 26, 34, 14]],
[[43, 35, 51, 67, 27],
[28, 23, 33, 43, 18],
[23, 19, 27, 35, 15]],
[[44, 36, 52, 68, 28],
[29, 24, 34, 44, 19],
[24, 20, 28, 36, 16]],
[[45, 37, 53, 69, 29],
[30, 25, 35, 45, 20],
[25, 21, 29, 37, 17]]])
>>> result[3,2,4]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #給予對(duì)應(yīng)abc的參數(shù)朋蔫,可以? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 從結(jié)果矩陣中調(diào)出結(jié)果
17
>>> a[3]+b[2]*c[4]? ? ? ? #跟普通方法結(jié)果一致
17
二、
1.使用默認(rèn)配置畫一個(gè)圖:
A.代碼:
B.效果:
2.改變線條的粗細(xì)和顏色以及設(shè)置圖片邊界:
代碼和效果: