创建或得到一个数组后,常常需要对数组中的某个或部分元素进行处理。在处理它们之前,需要先获取它们。获取它们的过程就是索引和切片。如果获取单个元素或不连续多个元素,称为索引;如果获取连续多个元素,称为切片。数组中每个元素都有自己的位置坐标,比如一维数组中的第几个元素,或二维数组中哪一行哪一列的元素。使用坐标对元素进行定位。位置定下来后就可以找到它,获取它。[大谦MATLAB,dqmatlab点com]
单个元素的索引
MATLAB和Python中分别用小括号和中括号进行索引和切片。对单个元素进行索引,给数组指定元素的坐标值即可。一维数组有一个坐标,二维数组有两个坐标。这个坐标常被称为索引号。
【MATLAB】
先考虑一维数组的情况,创建一个一维数组A:
>> A=1:8
A =
1 2 3 4 5 6 7 8
获取数组中第2个元素:
>> A(2)
ans =
2
再看一下二维数组。创建一个二维数组B:
>> B=[12 62 93 -8 22; 16 2 87 43 91]
B =
12 62 93 -8 22
16 2 87 43 91
-4 17 -72 95 6
获取第2行第3列的元素:
>> B(2,3)
ans =
87
获取第1行第4列的元素:
>> B(1,4)
ans =
-8
【Python】
Python中从NumPy数组中获取单个值,与MATLAB中不同之处有两点,一是MATLAB中用小括号进行索引,而Python中用中括号索引;二是索引号的基数为0,MATLAB中索引号的基数为1。
下面用arange函数创建一个一维NumPy数组。
>>> a=np.arange(8)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7])
获取数组中的第2个值。
>>> a[1]
1
设置索引号为负的整数N,可获取数组中倒数第N个值。下面获取数组a的倒数第3个元素。
>>> a[-3]
5
对于二维的情况:
>>> b=np.array([[12,62,93,-8,22],[16,2,87,43,91],[-4,17,-72,95,6]])
获取第2行第3列的元素:
>>> b[1,2]
87
获取第1行第4列的元素:
>>> b[0,3]
-8
多个不连续元素的索引
用数组给定一组索引号进行索引,可以实现一次同时索引多个不连续元素。
【MATLAB】
创建一维数组A:
>> A=1:8;
获取第2、5、7个元素:
>> A([2,5,7])
ans =
2 5 7
创建二维数组B:
>> B=[12 62 93 -8 22; 16 2 87 43 91];
获取第1行第1列和第3列的元素:
>> B(1,[1,3])
ans =
12 93
【Python】
创建一个一维NumPy数组。
>>> a=np.arange(8)
获取数组中的第2、5、7个值。
>>> a[[1,4,6]]
array([1, 4, 6])
对于二维的情况:
>>> b=np.array([[12,62,93,-8,22],[16,2,87,43,91],[-4,17,-72,95,6]])
获取第1行第1列和第3列的元素:
>>> b[0,[0,2]]
array([12, 93])
数组的切片
通过切片可以获取数组中的连续多个元素。切片需要指定连续多个元素的起始索引号、终止索引号和递增步长。默认时步长为1,可以省略不写。
【MATLAB】
创建一维数组A:
>> A=1:8;
获取第2至7个元素:
>> A(2:7)
ans =
2 3 4 5 6 7
第2至7个元素中,每隔2个元素获取1次。此时在索引号2和7之间添加步长2。
>> A(2:2:7)
ans =
2 4 6
获取第4个元素及它之后的所有元素。用end表示数组当前维的最后一个元素的索引号。
>> A(4:end)
ans =
4 5 6 7 8
对于二维的情况,创建二维数组B:
>> B=[12 62 93 -8 22; 16 2 87 43 91];
获取第1行第1列到第3列的元素:
>> B(1,1:3)
ans =
12 62 93
获取行号第1行到第2行,列号第2列到第3列构成的局部区域内的元素:
>> B(1:2,2:3)
ans =
62 93
2 87
【Python】
下面用arange方法创建一个NumPy数组。
>>> a=np.arange(8)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7])
获取数组中第2-7个元素。注意Python中切片时遵循包头不包尾原则,即下面代码中索引号7对应的第8个元素不包括进来。
>>> a[1:7]
array([1, 2, 3, 4, 5, 6])
第2至7个元素中,每隔2个元素获取1次。此时在索引号1和7之后添加步长2。注意,MATLAB中步长是添加在起始值和终止值之间,Python中步长则是添加在终止值之后。
>>> a[1:7:2]
array([1, 3, 5])
获取数组中第4个及后面所有的值。注意Python中冒号的用法,冒号在前面,表示前面的值全取;冒号在后面,表示后面的值全取;冒号在两个数之间,表示取这两个数确定的范围内的所有值。
>>> a[3:]
array([3, 4, 5, 6, 7])
获取数组中前5个数据。
>>> a[:5]
array([0, 1, 2, 3, 4])
获取数组中倒数第3个及它后面所有的值。
>>> a[-3:]
array([5, 6, 7])
对于二维的情况:
>>> b=np.array([[12,62,93,-8,22],[16,2,87,43,91],[-4,17,-72,95,6]])
获取第1行第1列到第3列的元素:
>>> b[0,0:3]
array([12, 62, 93])
获取行号第1行到第2行,列号第2列到第3列构成的局部区域内的元素:
>>> b[0:2,1:3]
array([[62, 93],
[ 2, 87]])