numpy中a[][][] 和 a[, , ]兩種索引方式的區別
阿新 • • 發佈:2018-12-11
之前一直對a[][][]
和 a[, , ]
兩種索引方式的區別不清楚,今天試驗了一下。
根據三個維度分別是:
還是數字
,共2^3^ =8
種情況進行了實驗。
1、a[:][:][:] 與 a[:, :, :](等價於a[:]), a[1][0][2] 與 a[1, 0, 2]
# -*- coding: utf-8 -*-
import numpy as np
a = np.arange(24).reshape([2,3,4])
print('a = ')
print(a)
b1 = a[:][:][:]
c1 = a[:, :, :]
print('b1 = ')
print(b1)
print ('c1 = ')
print(c1)
b2 = a[1][0][2]
c2 = a[1, 0, 2]
print('b2 = ')
print(b2)
print('c2 = ')
print(c2)
結果
a = [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] b1 = [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] c1 = [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] b2 = 14 c2 = 14
可以看到兩種方式沒有區別
2、形如 a[0][:][:] 與 a[0, :, :]
# -*- coding: utf-8 -*-
import numpy as np
a = np.arange(24).reshape([2,3,4])
print('a = ')
print(a)
b1 = a[0][:][:]
c1 = a[0, :, :]
print('b1 = ')
print(b1)
print('c1 = ')
print(c1)
b2 = a[:][0][:]
c2 = a[:, 0, :]
print('b2 = ')
print(b2)
print('c2 = ')
print (c2)
b3 = a[:][:][0]
c3 = a[:, :, 0]
print('b3 = ')
print(b3)
print('c3 = ')
print(c3)
結果
a =
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
b1 =
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
c1 =
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
b2 =
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
c2 =
[[ 0 1 2 3]
[12 13 14 15]]
b3 =
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
c3 =
[[ 0 4 8]
[12 16 20]]
可以看到a[0][:][:] ,a[:][0][:] ,a[:][:][0]效果一樣(都是a[0][:][:]的結果
),而另一種方式是不同的
3、形如 a[0][0][:] 與 a[0, 0, :]
# -*- coding: utf-8 -*-
import numpy as np
a = np.arange(24).reshape([2,3,4])
print('a = ')
print(a)
b1 = a[0][0][:]
c1 = a[0, 0, :]
print('b1 = ')
print(b1)
print('c1 = ')
print(c1)
b2 = a[0][:][0]
c2 = a[0, :, 0]
print('b2 = ')
print(b2)
print('c2 = ')
print(c2)
b3 = a[:][0][0]
c3 = a[:, 0, 0]
print('b3 = ')
print(b3)
print('c3 = ')
print(c3)
結果
a =
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
b1 =
[0 1 2 3]
c1 =
[0 1 2 3]
b2 =
[0 1 2 3]
c2 =
[0 4 8]
b3 =
[0 1 2 3]
c3 =
[ 0 12]
同第二條,a[0][0][:] ,a[:][0][0] ,a[0][:][0]效果一樣(都是a[0][0][:]的結果
),而另一種方式是不同的
個人理解:a[][][]這種方式索引時會自動把
:
調整到最後,而a[, ,]這種方式會正確按照順序去索引