1.前言 => 2.為什麼要用 Array? => 3.Array 的基本操作 => 4.多維 Array 的操作 
=> 5.Array 中的常用function => 6.附錄


1.前言

一陣子沒更新了...人氣直直落
也深刻的瞭解到 我寫的大部分東西
其實沒什麼價值....不然早就被人家翻遍了
也許只有對我有價值吧
忘了的東西可以自己記錄在這邊
實際上 在這邊的東西
網路上google一下就有完整的介紹 有的還有影音XD

這讓我蠻洩氣的
以為只要po些文 就有點人氣 ~~哈哈
不過~~
就慢慢來吧 
等我寫到 更有深度的東西時
我想 就會漸漸有更多人想要看吧~~


2.為什麼要用 Array? 

其實py裡面 最直觀的資料格式就是 list 了吧
直接打 [] 就可以把你要的資料塞進去
詳見 : 

[純教學系列文3]在"Python"中 基本的"資料格式"

但新手小白 在寫code的時候
發現 list 的計算 其實並不直覺(可能習慣用R了...)
例如 :
x = [3,6,9]
x*3
##我想把 x 裡面的每個元素都乘 3 變成 [9,18,27]

##結果跑出來的是...


## py把裡面的元素複製 3遍....
## 那要怎麼用才能達到我想要的呢?
## 一個很土炮的方法就是用 for 
import numpy as np
x = [3,6,9]
for ind in np.arange(3):
    x[ind]=x[ind]*3
x

## 但這樣太弱了吧~~
## 所以就到了 Array 登場的時候了


3.Array 的基本操作

要產生一個 Array 簡單的方法就是 np.array(  這裡輸入 list  )

x= np.array( x  )  ## x 就是剛剛的 list 也可以直接打 np.array( [3,6,9] )
x*3   ## 然後就可以簡單計算囉

## 比剛剛的簡單多了吧
## 接著說 如果我不要全部都乘 3  
## 我想要第一個乘 2 第二個乘 3 第三個乘 4
## 如下
import numpy as np
x= np.array([3,6,9]) 
y= np.array([2,3,4])
x*y
## 是不是很簡單

#另外  array和 list 想叫出你想要的元素時 方法是很類似的
#例如 

print(x)
x[1]   # index 從零開始
x[-1]  # 最後一個元素
print(x[1],"\n",x[-1])


  

### 可以用類似序號的方式來使用
x[0:2] # 叫出 第一第二個
x[:2]  # 不指定開始 (也就是從第一個開始)
x[2:]  # 不指定結束 
x[:]   # 通通都叫出來啦 

## 結果如下~~ 請大家自己對對看囉
## 還是要記得 index 是從 0 開始... 然後序列的最後一個數字 不會被叫出來....

## 最後還有進階一點的叫法 (布林)
print(x>3)  # 利用布林運算
x[x>3]      # 叫出大於 3 的元素


4.多維 Array 的操作 

array 可以還有一個好處就是~~
我們可以做出多維的矩陣來!!
寫法是這樣的:

m = np.array( [ [1,2,3],[4,5,6] ] ) 

##  用[ ] 包住 每一行的元素 [ ]
##  新手小白每次都會在外面少打一個 [   ] 
##  這是一個  2乘3 的矩陣喔
##  意思是 有 2個 row 和 3 個 column

## 再來叫出我想要的元素
#用shape指令 可以確認維度
print(np.shape(m))  ## 這是2*3的矩陣
## 類似一維的 只是中間加了 "," 
## 記得是先 row 後 column 


print(m[0,0])       ## 1st row ,1st column
print(m[1,2])       ## laster

## 其他寫法也類似一維的
print(m[:,0])   # 1st column
print(m[0,:])   # 1st row
print(m[:])     # all

## 以上 也請大家對對看吧~~


5.Array 中的常用function

array 的 function 很多
我只挑幾個 我覺得比較容易用到的

1. np.reshape()  ## 把矩陣的行列改變
例如:
#### 生成二維矩陣
a=np.array([1,2,3,4,5,6,7,8,9,10,11,12])   ## 本來是1*1
b=np.reshape(a,(2,-1))   # 利用 reshape 改成 2*2
#### 這邊的參數很重要  (2,-1) 
#### 可以想成 我要生成 2* X 的矩陣 X 是未知的
####  X 寫 -1 的話 Python 會自己抓 X 是多少~~
np.shape(b)   ## 這邊X是 6 
print(b)          ## 所以是 2*6 矩陣

  #### 另外
  #### 參數 打 (2,2,-1) 的話 也可以生成三維的 但這邊就不示範囉

2.np.eye()    ## 單位矩陣
   ### 對角線是 1 的矩陣
np.eye(3)   ## 運算時很常用

3. m.T  #轉置矩陣 m 是我本來生成的矩陣 後面加T 就好!!

4.  a.I ##反矩陣  同轉置矩陣 原本的矩陣後面加 I 就好
a=np.mat(np.eye(2,2)*0.5); a.I   ## 因為要 n*n 的矩陣這邊重新生成

5. dot ##矩陣乘法 

a=np.array([  [1,2,3],[1,1,1],[1,1,1]  ])
b=np.array( [ [1,2,3] ]).T
print(np.shape(a), np.shape(b))  ## 相乘的話 維度要對好
print(a); print(b) ;    ## 這邊是 3*3 對上 3*1
ab=np.dot(a,b)       ## 矩陣乘法
print('\n'); print(ab) 

## 矩陣乘完之後就是 3*1囉 可以手算看看對不對


6.附錄

array 當然還有很多其他的 Function 可以使用
詳細可以參閱  https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html

另外 我還學到了  mat 這種矩陣的形式( 如果你有仔細看這篇的話 我有用到過 )
這在網上google 了一下 這兩種是有差異的 
簡單來說 array 的運算比較複雜(畢竟是多維度的)  而mat 比較簡單
但 mat 做得到的 array 都做得到 
所以可以用array為主  只不過要多熟悉指令囉

今天就更新到這邊 感謝觀看 掰掰~~

 

arrow
arrow

    Markjong001 發表在 痞客邦 留言(2) 人氣()