首先,要知道數(shù)組有兩種索引方式。比如對一個3x4的矩陣a(數(shù)據(jù)類型為:numpy.array)
- 線性索引(LINEAR indices):a[10]。首先要明白,np.array是按照先行后列存儲的。這也決定了矩陣reshape的結(jié)果
- 矩陣索引:a[1,2]
unravel_index 已知線性索引,求矩陣索引
- 第一個參數(shù):可以是任意矩陣。矩陣的值是線性索引
- 第二個參數(shù):必須是矩陣的形狀。如對于3x4的矩陣a,就是
a.shape或(3,4)
執(zhí)行下面的代碼
import numpy np
np.unravel_index([3, 0, 10], (3,4)) # 在一個(3x4)的矩陣中,第3、第0、第10個元素,的行列索引
結(jié)果是
(array([0, 0, 2], dtype=int64), array([3, 0, 2], dtype=int64))
解釋:
對于一個(3x4)的矩陣,它的數(shù)據(jù)編號如下。所以輸出結(jié)果就很好理解了
0 1 2 3
4 5 6 7
8 9 10 11
ravel_multi_index 已知矩陣索引,求線性索引
- 第一個參數(shù):比如是與參數(shù)二對應(yīng)的,矩陣索引。例如,參數(shù)2指明形狀為3x4;那就說明是二維的,那么這里的參數(shù)必須是2xN的np.array
- 第二個參數(shù):必須是矩陣的形狀。如對于3x4的矩陣a,就是
a.shape或(3,4)
執(zhí)行下面的代碼。它是上面unravel_index例程的逆過程
import numpy np
np.ravel_multi_index (np.array([[0, 0, 2],[3, 0, 2]]),(3,4)) # 在一個(3x4)的矩陣中,求(0,3),(0,0),(2,2)位置處的線性索引
結(jié)果是
array([ 3, 0, 10], dtype=int64)