基本的切片操作不再讲解。可以任意百度搜索一片博文即可得到你想要的答案。废话不多说,看例子:
MATLAB
>>> A = reshape(randperm(25),[5,5])
A =
3 8 6 7 19
16 22 24 1 13
17 20 4 12 23
2 10 11 9 14
25 18 15 21 5
>>> row = [1,3,5];
>>> col = [2,4,5];
>>> A(row,col)
ans =
8 7 19
20 12 23
18 21 5
Python
>>> import numpy as np
>>> A = np.random.permutation(25).reshape((5,5))
array([[ 6, 4, 13, 18, 16],
[ 9, 10, 12, 22, 19],
[ 1, 15, 17, 7, 0],
[11, 3, 23, 24, 2],
[ 8, 20, 14, 5, 21]])
>>> row = [0,2,4]
>>> col = [1,3,4]
Python中第一种情况:
>>> A[row,col]
array([ 4, 7, 21])
我们可以看出,它是将前后两个列表位置一一对应(如图所示),构成了坐标进行取值。第一个列表代表行标,第二个列表代表列标。
Python中第二种情况:
>>> A[row,:][:,col]
array([[ 4, 18, 16],
[15, 7, 0],
[20, 5, 21]])
可以看出,第二种情况就和MATLAB是一样的了。取指定的行和指定的列的所有交叉元素,如下图所示。
附
该文章于2017年5月20日于CSDN上首次发表,2017年12月22日搬家至此!