a=np.array([1,2,3])
b=np.array([1,1,0])
a[b]
结果为
array([2, 2, 1])
这里b可以换成列表或元组,a不能换。
这里只谈论二维矩阵
a=np.array([[1,2,3],
[4,5,6]])
b=np.array([1,1,0])
a[b]
结果为
array([[4, 5, 6],
[4, 5, 6],
[1, 2, 3]])
b中每个元素对应a中一行,如果需要对应a单个元素,需要b的元素本身二维列表、数组或者元组。
这里只谈论二维矩阵
a=np.array([[1,2,3],
[4,5,6]])
b=np.array([[1,1,0],
[0,0,0],
[0,0,1]])
a[b]
结果为
array([[[4, 5, 6],
[4, 5, 6],
[1, 2, 3]],
[[1, 2, 3],
[1, 2, 3],
[1, 2, 3]],
[[1, 2, 3],
[1, 2, 3],
[4, 5, 6]]])
相当于在上一种情况中把b变成了三个数组,所以一共得到了三个矩阵。
b=([1,1,0], [0,0,0]),情况如何?
import numpy as np
a=np.array([[1,2,3],
[4,5,6]])
b=([1,1,0],[0,0,0])
print(a[b])
结果为
array([4,4,1])
相当于
a([1,1,0],[0,0,0])
等同于使用两个数组(不是一个矩阵),相当于
array([a[1,0],a[1,0],a[1,0]])
从第一个数组和第二个数组分别取出对应的数作为索引的第一维和第二维,这个有点复杂,但很有用,特别是在深度学习中。