1. 程式人生 > >numpy中a[][][] 和 a[, , ]兩種索引方式的區別

numpy中a[][][] 和 a[, , ]兩種索引方式的區別

之前一直對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[, ,]這種方式會正確按照順序去索引