数组的重构

数组的重构是对原有数组进行变换、重塑等操作,构造新的数组。[大谦MATLAB,dqmatlab点com]

数组的转置

数组转置,相当于数组相对于对角线作了一个对称变换,原来的第1行变成现在的第1列,原来的第2行变成新数组的第2列,如此类推。[大谦MATLAB,dqmatlab点com]

【MATLAB】

MATLAB中可以使用单引号或transpose函数实现数组的转置。对于一维数组,行向量转置后变成列向量,列向量转置后变成行向量。

code.matlab
>> A=[12 62 93 -8 22]
>> A'
ans =
	12
	62
	93
	-8
	22

也可以用transpose函数进行转置。

code.matlab
>> transpose(A);

返回上面相同的结果。

创建二维数组:

code.matlab
>> B=[12 62 93 -8 22;16 2 87 43 91;-4 17 -72 95 6]
B =
12	62	93	-8	22
16	2	87	43	91
-4	17	-72	95	6
>> B'
ans =
	12	16	-4
	62	2	17
	93	87	-72
	-8	43	95
	22	91	6

【Python】

Python中使用NumPy包的transpose函数进行数组转置。

创建一个一维数组并进行转置。

code.python
>>> a=np.array([12,62,93,-8,22])
>>> b=np.transpose(a)
>>> b
array([12, 62, 93, -8, 22])

创建一个二维数组并进行转置。

code.python
>>> a=np.array([[12,62,93,-8,22],[16,2,87,43,91],[-4,17,-72,95,6]])
>>> b=np.transpose(a)
>>> b
array([[ 12,  16,  -4],
       [ 62,   2,  17],
       [ 93,  87, -72],
       [ -8,  43,  95],
       [ 22,  91,   6]])

数组的翻转

假设以数组所在矩形的中心为原点画水平轴线和垂直轴线,数组的翻转指的是数组的行相对于水平轴线交换位置,原来的第1行变成最后1行,原来的第2行变成倒数第2行;或者数组的列相对于垂直轴线交换位置,原来的第1列变成最后1列,原来的第2列变成倒数第2列。前一种翻转称为上下翻转,后一种翻转称为左右翻转。[大谦MATLAB,dqmatlab点com]

【MATLAB】

MATLAB中使用fliplr函数实现数组的左右翻转,用flipud函数实现上下翻转。

创建二维数组A:

code.matlab
>> A=[12 62 93 -8 22;16 2 87 43 91;-4 17 -72 95 6]
A =
12	62	93	-8	22
16	2	87	43	91
-4	17	-72	95	6

对二维数组A作左右翻转:

code.matlab
>> B=fliplr(A)
B =
22	-8	93	62	12
91	43	87	2	16
6	95	-72	17	-4

对二维数组A作上下翻转:

code.matlab
>> B=flipud(A)
B =
-4	17	-72	95	6
16	2	87	43	91
12	62	93	-8	22

【Python】

Python中使用NumPy包的fliplr函数实现数组的左右翻转,用flipud函数实现上下翻转。

code.python
>>> a=np.array([[12,62,93,-8,22],[16,2,87,43,91],[-4,17,-72,95,6]])
>>> b=np.fliplr(a)
>>> b
array([[ 22,  -8,  93,  62,  12],
       [ 91,  43,  87,   2,  16],
       [  6,  95, -72,  17,  -4]])
>>> c=np.flipud(a)
>>> c
array([[ -4,  17, -72,  95,   6],
       [ 16,   2,  87,  43,  91],
       [ 12,  62,  93,  -8,  22]])

7.5.3数组的重塑

重塑通过改变已有数组的形状,即行数和列数,来构造新的数组。

【MATLAB】

MATLAB中使用reshape函数实现数组的重塑。

创建3行4列的二维数组A:

code.matlab
>> A=[12 62 93 -8;16 2 87 43;-4 17 -72 95]
A =
12	62	93	-8
16	2	87	43
-4	17	-72	95

将数组A重塑为2行6列的数组:

code.matlab
>> B=reshape(A,2,6)
B =
12	-4	2	93	-72	43
16	62	17	87	-8	95

注意,MATLAB重塑数组时是按照先列后行的顺序从原数组中取数的。

【Python】

Python中使用NumPy包的reshape函数实现数组的重塑。

创建3行4列的二维数组a,重塑为2行6列的新数组:

code.python
>>> a=np.array([[12,62,93,-8],[16,2,87,43],[-4,17,-72,95]])
>>> a
array([[ 12,  62,  93,  -8],
       [ 16,   2,  87,  43],
       [ -4,  17, -72,  95]])
>>> b=np.reshape(a,[2,6])
>>> b
array([[ 12,  62,  93,  -8,  16,   2],
       [ 87,  43,  -4,  17, -72,  95]])

注意,Python中用reshape重塑数组时是按照先行后列的顺序从原数组中取数的,与MATLAB中不同。

重复元素

通过重复数组中的元素构造新的数组。

【MATLAB】

MATLAB中使用repelem函数通过重复元素构造新数组。

创建一个一维数组v:

code.matlab
>> v=[1 2 3 4];

将v中的每个元素依次重复3次,构造新数组u。

code.matlab
>> u=repelem(v,3)
u=1×12
     1     1     1     2     2     2     3     3     3     4     4     4

【Python】

Python中使用NumPy包的repeat函数进行构造。下面用Python实现上面的例子。

code.python
>>> np.repeat([1,2,3,4],3)
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])