python學習筆記-Day2 Numpy陣列
1. 實現兩個陣列相加,在資料量特別大的時候
產生陣列:
(1) 從列表產生陣列:a=[0,1,2,3]
a=np.array(1)
a
(2) 從列表傳入
a=np.array([1,2,3,4])
(3) 生成全0的陣列
np.zeros(5)
(4) 生成全1的陣列
np.ones(5,dtype=’bool’)àdtype可以用來指定資料型別
(5) 可以使用fill方法將陣列設為指定值
(6) 生成整數序列
a=np.arange(1,10)從1開始生成資料,一直到9
(7) 生成等差數列
a=np.linspace(1,10,10)從1到10總共10個等差數列
(8) 生成隨機數
a=np.random.rand(10)
(9) 生成具有服從標準正態的隨機數
a=np.random.randn(10)
(10) 生成隨機整數
a=np.random.randint(10)
2. 檢視型別
(1) 檢視陣列型別
type(a)
(2) 檢視陣列中的資料型別
a.dtype
(3) 檢視形狀
a.shape
(4) 檢視陣列元素的個數
a.size
(5) 檢視維度
a.ndim
3. 索引和切片
(1) 索引第一個元素
(2) 修改第一個元素的值,切片:支援負索引
4. 多維陣列及其屬性
可以利用array來實現二維陣列
a=np.array([[1,2,3,4],
[5,6,7,8]])
5. 多維陣列索引
對於二維陣列,可以傳入兩個數來索引:
[[1,2,3,4],
[5,6,7,8]]
a[1,3]à其中1是行索引,3是列索引,中間用逗號隔開,事實上python會將他們看作一個元組(1,3),然後按照順序進行對應,可以利用索引給他們賦值
事實上,我們還可以使用單個索引來索引一整行內容
a[1]
python會將這個單元組當成對第一維的索引,然後返回對應的內容
a[:,1]
這樣的寫法是第二列的內容
6. 多維陣列切片
f=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
想得到第一行的第4和第5個元素
f[0,3:5]
想得到最後兩行的最後兩列
f[2:,2:]
每一維都支援切片的規則,包括負索引
想要隔行取:f[2::2,2::2]
7. 切片是引用
切片在記憶體中使用的是引用機制,引用機制意味著python並沒有為b分配新的空間來儲存他的值,而是讓b指向a所分配的記憶體空間,因此b會改變a的值,而這種現象在列表中並不會出現
a=np.array([1,2,3,4,5,6])
b=a[1:4]
b[1]=100
此時a的對應的值會發生改變
一個解決方案就是使用copy()方法產生一個複製,複製操作即會申請一個新的空間
8. 花式索引
(1) 一維花式索引
a=np.arange([0,100,10])
index=[1,2,-3]
y=a[index]
y
索引出來的即為10,20,70
(2) 利用布林陣列花式索引
(3) 二維花式索引
(4) 不完全索引
只給定行索引的時候,返回整行
y=a[:3]
9. where語句
where函式會返回所有非零元素的索引
(1) 一維陣列
判斷陣列中的元素是不是大於3
a=np.array([1,2,3,4,5,6])
a>3
則會返回[false false false true true true]
若要陣列中所有大於3的元素的索引位置:
np.where(a>3)
where返回值是一個元組,返回的是索引位置
10.陣列型別轉換
(1) 當陣列內元素型別不相同時
a=np.array([1.3,-2],dtype=float)
(2) 將其強制轉換
(3) astype方法-返回一個新陣列
a=np.array([1,2,3])
b=a.astype(float)
11.陣列排序
(1) sort函式
a=np.array([3212,4343,2121,5442])
b=np.sort(a)
(2) argsort函式
argsort返回從小到大的排列在陣列中的索引位置
(3)
12.求和np.sum()
13.最大值np.max()
14.最小值np.min()
15.均值np.mean()
16.標準差np.cov()