import numpy as np
#numpy数组的神奇索引。“神奇索引”是一个术语:使用整数数组进行数据索引。即方括号[]里,是整数数组。
#创建数组
arr = np.empty((8,4))
for i in range(8):#固定搭配,等于matlab的for i=0:7
arr[i] = i
print(arr)
#使用一个整数数组作为索引
print(arr[[4, 3, 0, 6]])#神奇索引,利用整数数组索引,将第4、3、0、6行取出,组成一新的数组
print(arr[[-3, -5, -7]])
#使用多个整数数组作为索引
arr1 = np.arange(32).reshape((8,4))
print(arr1)
print(arr1[[1, 5, 7, 2], [0, 3, 1, 2]])#选中了(1,0)、(5,3)、(7,1)、(2,2)组成一个新的一维数组
arr2 = arr1[[1, 5, 7, 2], [0, 3, 1, 2]]#神奇索引是复制,不是原数组的视图,
arr2 = 1
print(arr1)
#结论:
#(1)神奇索引,是在方括号中使用整数数组。
#(2)神奇索引是复制,而不是原数组的视图。因此,改变神奇索引的值,不会改变原数组的值
输出结果:
[[0. 0. 0. 0.]
[1. 1. 1. 1.]
[2. 2. 2. 2.]
[3. 3. 3. 3.]
[4. 4. 4. 4.]
[5. 5. 5. 5.]
[6. 6. 6. 6.]
[7. 7. 7. 7.]]
[[4. 4. 4. 4.]
[3. 3. 3. 3.]
[0. 0. 0. 0.]
[6. 6. 6. 6.]]
[[5. 5. 5. 5.]
[3. 3. 3. 3.]
[1. 1. 1. 1.]]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
[ 4 23 29 10]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]