数组的重构是对原有数组进行变换、重塑等操作,构造新的数组。[大谦MATLAB,dqmatlab点com]
数组的转置
数组转置,相当于数组相对于对角线作了一个对称变换,原来的第1行变成现在的第1列,原来的第2行变成新数组的第2列,如此类推。[大谦MATLAB,dqmatlab点com]
【MATLAB】
MATLAB中可以使用单引号或transpose函数实现数组的转置。对于一维数组,行向量转置后变成列向量,列向量转置后变成行向量。
>> A=[12 62 93 -8 22]
>> A'
ans =
12
62
93
-8
22
也可以用transpose函数进行转置。
>> transpose(A);
返回上面相同的结果。
创建二维数组:
>> 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函数进行数组转置。
创建一个一维数组并进行转置。
>>> a=np.array([12,62,93,-8,22])
>>> b=np.transpose(a)
>>> b
array([12, 62, 93, -8, 22])
创建一个二维数组并进行转置。
>>> 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:
>> 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作左右翻转:
>> B=fliplr(A)
B =
22 -8 93 62 12
91 43 87 2 16
6 95 -72 17 -4
对二维数组A作上下翻转:
>> B=flipud(A)
B =
-4 17 -72 95 6
16 2 87 43 91
12 62 93 -8 22
【Python】
Python中使用NumPy包的fliplr函数实现数组的左右翻转,用flipud函数实现上下翻转。
>>> 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:
>> 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列的数组:
>> 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列的新数组:
>>> 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:
>> v=[1 2 3 4];
将v中的每个元素依次重复3次,构造新数组u。
>> u=repelem(v,3)
u=1×12
1 1 1 2 2 2 3 3 3 4 4 4
【Python】
Python中使用NumPy包的repeat函数进行构造。下面用Python实现上面的例子。
>>> np.repeat([1,2,3,4],3)
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])