前提:
1 假設你已經清楚了python 的list切片操作(這裡不過多介紹)。
2 假設你對tensor的維度有了很好的理解,如果沒有可以看我之前的博文 tensor維度的理解
直接例子演示:
#建立三維矩陣a
a = np.arange(18)
.reshape(2,
3,3)
print
(a)
#輸出a:(便於觀察重新格式化了輸出)
[[ [ 0 1 2],
[ 3 4 5],
[ 6 7 8] ],
[ [ 9 10 11],
[12 13 14],
[15 16 17] ]
]第0維:兩個3x3的2維矩陣的方向
第1維:每個0維下三個3x1的一維矩陣的方向
第2維:每個3x1矩陣內的三個數值的方向
如果理解了維度的概念,開始進入正題:
print
(a[:,1
:3,:
])#解析一下a[:,1:3,:]:
#對矩陣a的0維進行 [:] 切片即全部獲取該維度
#對矩陣a的1維進行 [1:3] 切片即只從第一項開始獲取,獲取3-1項。
#對矩陣a的2維進行 [:] 切片即全部獲取該維度
輸出:
[[[ 3 4 5]
[ 6 7 8]]
[[12 13 14]
[15 16 17]]]
解析:
因為0維全部獲取,所以兩個3x3的矩陣都會拿到。一維獲取的是下標為1的項和下標為3-1的項,注意0維下的兩個矩陣都會進行此操作,所以兩個3x3矩陣變成了2x3矩陣(被切片)。3維獲取的是全部項,所以2x3矩陣下面的數值並沒有被切掉。
嘗試更複雜的操作:
print
(a[0:1
,1:3
,1:2
])
輸出:
[[[4]
[7]]]
逐步分解:
1第0維獲第零項得到:
[[ [ 0 1 2]
[ 3 4 5]
[ 6 7 8] ]]
2第1維獲取第一和第二項得到:
[[[ 3 4 5]
[ 6 7 8] ]]]
3第2維獲取第一項得到:
[[[ 4 ]
[ 7 ] ]]]
(非常簡單)
看例子:
print
(a[:,:
,0])
此時第2維的切片是乙個值不是[:]形式,表示獲取該維度的第num項,這裡表示獲取第2維的第0項
輸出:[[ 0 3 6]
[ 9 12 15]]
輸出的結果少了乙個維度。變成了2維。對比第一種切片方式,同樣獲取第2維的第0項:
print
(a[:,:
,0:1
])
輸出:
[[[ 0]
[ 3]
[ 6]]
[[ 9]
[12]
[15]]]
結果依然是三維的。
結論:list[num]形式的切片會引發降維
反轉矩陣:
print
(a[::-
1])# 反轉第0維 實質是從後面複製第0維
print
(a[::-
1,::
-1])
# 反轉第0維和第1維
print
(a[::-
1,::
-1,:
:-1]
)# 反轉第0,1,2維
切片賦值:a[:,
0,:]
=-1print
(a)
輸出:
[[[-1, -1, -1],
[3,4,5],
[6,7,8]],
[-1,-1,-1],
[12,13,14],
[15,16,17]]
](完)
numpy 矩陣 秩 Numpy 矩陣
機器學習中會用到大量的數學操作,而 numpy 計算庫使這些操作變得簡單,這其中就涉及到了 numpy 的矩陣操作,下面我們就來一起學習如何在 numpy 科學計算庫中進行矩陣的一些基本運算。定義矩陣使用 numpy 科學計算庫中的 mat 函式,如下所示 numpy.mat data,dtype ...
numpy基本操作 2 切片和索引
1.切片 import numpy as np 切片和索引 a np.arange 10 print a s slice 2,7,2 print a s c a 2 7 2 print c 0 1 2 3 4 5 6 7 8 9 2 4 6 2 4 6 d np.arange 9 reshape 3...
numpy矩陣的基礎操作
import numpy delimiter分隔符,dtype資料格式 word alcho numpy.genfromtxt d qiujiahao4.txt delimiter dtype str print type word alcho print word alcho 0 1 2 3 4 ...