numpy 矩陣切片操作解析

2021-10-06 19:38:32 字數 2276 閱讀 7410

前提:

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 ...