文章出處

一、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)

 

[[ 1.  2.]
 [ 3.  4.]]
<NDArray 2x2 @cpu(0)>
[ 5.47722578]
<NDArray 1 @cpu(0)>

更多ndarray的使用,請參考:

1、https://mxnet.incubator.apache.org/api/python/ndarray.html (ndarray官方文檔)

2、https://zh.gluon.ai/chapter_crashcourse/ndarray.html  (使用NDArray來處理數據)


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()