1. 程式人生 > >python學習筆記-Day2 Numpy陣列

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()