文章出處
文章列表
一、mxnet安裝 (以下均為mac環境)
有二種方式:
1.1 用conda安裝
1 #創建gluon目錄 2 mkdir gluon-tutorials && cd gluon-tutorials 3 4 #下載源代碼 5 curl https://zh.gluon.ai/gluon_tutorials_zh.tar.gz -o tutorials.tar.gz 6 7 #解壓 8 tar -xzvf tutorials.tar.gz && rm tutorials.tar.gz 9 #設置清華鏡像站 10 conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 11 #進入解壓后的目錄 12 cd gluon-tutorials 13 #創建環境 14 conda env create -f environment.yml 15 #激活環境 16 source activate gluon
但是14行創建環境這里,這幾天一直報連不上清華的鏡像站,不知道跟開十久大有無關系,如果大家也遇到類似問題,可以用下面的方式
1.2 用brew+pip安裝
1 brew update 2 brew tap homebrew/science 3 brew info opencv 4 brew install opencv 5 pip install mxnet
二、初試NDArray
2.1 先啟用jupyter-notebook
2.2 創建矩陣
1 from mxnet import ndarray as nd 2 x = nd.array([[1,2],[3,4]]) 3 print(x) 4 y = nd.array([[5,6],[7,8]]) 5 print(y)
[[ 1. 2.] [ 3. 4.]] <NDArray 2x2 @cpu(0)> [[ 5. 6.] [ 7. 8.]] <NDArray 2x2 @cpu(0)>
2.3 矩陣加法
print(x+y)
[[ 6. 8.] [ 10. 12.]] <NDArray 2x2 @cpu(0)>
2.4 矩陣數乘(點乘)
print(x*y)
[[ 5. 12.] [ 21. 32.]] <NDArray 2x2 @cpu(0)>
2.5 矩陣乘法(叉乘)
print(nd.dot(x,y))
[[ 19. 22.] [ 43. 50.]] <NDArray 2x2 @cpu(0)>
2.5 e的指數運算
print(nd.exp(x))
[[ 2.71828175 7.38905621] [ 20.08553696 54.59814835]] <NDArray 2x2 @cpu(0)>
上述幾個操作的公式圖解:
2.6 生成正態分布隨機矩陣
x=nd.random_normal(0, 1, shape=(2, 2)) print(x)
[[ 0.45787829 0.93632793] [-0.89425808 0.35744399]] <NDArray 2x2 @cpu(0)>
2.7 矩陣轉置
1 from mxnet import ndarray as nd 2 x = nd.array([[1,2],[3,4],[5,6]]) 3 print(x) 4 print(x.T) #轉置
[[ 1. 2.] [ 3. 4.] [ 5. 6.]] <NDArray 3x2 @cpu(0)> [[ 1. 3. 5.] [ 2. 4. 6.]] <NDArray 2x3 @cpu(0)>
2.8 廣播
如果2個矩陣A,B進行運算時,行或列的數量不滿足運算要求,ndarray會嘗試將第2個矩陣B,自動擴容(行或列),然后進行運算,如下面的代碼示例:
1 from mxnet import ndarray as nd 2 x = nd.array([[1,2,3,4]]).reshape([2,2]) 3 y = nd.array([[5]]) 4 print(x) 5 print(y) 6 print(x+y)
[[ 1. 2.] [ 3. 4.]] <NDArray 2x2 @cpu(0)> [[ 5.]] <NDArray 1x1 @cpu(0)> [[ 6. 7.] [ 8. 9.]] <NDArray 2x2 @cpu(0)>
x是一個2行2列的矩陣,而y是1行1列的矩陣,2個矩陣進行加法運算時,ndarray會將y自動復制擴展成2行2列的矩陣,圖解如下:
注:廣播這種復制擴容的行為,并非對所有操作都適用,比如叉乘就會報錯(如:nd.dot(x,y)大家自己自行測試下),其實很容易埋坑,個人并不推薦使用。
2.9 取第幾行/第幾列
1 from mxnet import ndarray as nd 2 x = nd.array([[1,2],[3,4],[5,6],[7,8]]) 3 print(x) 4 print(x[:,0]) #取第1列 5 print(x[1:2]) #取第2行 6 print(x[1:3,0:2]) #取第2到3行 + 第1到2列 7 i = nd.array([[0,2]]) 8 print(nd.take(x,i)) #取第1行、第3行
[[ 1. 2.] [ 3. 4.] [ 5. 6.] [ 7. 8.]] <NDArray 4x2 @cpu(0)> [ 1. 3. 5. 7.] <NDArray 4 @cpu(0)> [[ 3. 4.]] <NDArray 1x2 @cpu(0)> [[ 3. 4.] [ 5. 6.]] <NDArray 2x2 @cpu(0)> [[[ 1. 2.] [ 5. 6.]]] <NDArray 1x2x2 @cpu(0)>
2.10 計算歐氏距離(norm)
1 import mxnet.ndarray as nd 2 import mxnet.autograd as ag 3 x = nd.array([[1,2],[3,4]]) 4 print(x) 5 nd.norm(x)
更多ndarray的使用,請參考:
1、https://mxnet.incubator.apache.org/api/python/ndarray.html (ndarray官方文檔)
2、https://zh.gluon.ai/chapter_crashcourse/ndarray.html (使用NDArray來處理數據)
文章列表
全站熱搜