如何使用约束重塑多个维度

时间:2018-09-19 00:45:15

标签: matlab

我一直在尝试使用重塑来实现此行为。我是Matlab的新手,所以我一直在挣扎。

我有一个

3 x 2 x 5矩阵称为A

我想合并尺寸1到5,但不包括尺寸4。在合并尺寸时,我想按顺序在每一行中保留列。

我知道我可以做类似的事情

A = reshape(A,[12,2,1]),但我担心的是,这可能无法保留每一行中列的顺序,并且不允许我排除尺寸。

示例:

(:,:,1) =

0.3168    3.1825
1.5841    1.5766
-0.7892    3.0073


(:,:,2) =

-0.2131    3.9708
2.9435    0.4964
-0.2131    2.5985

(:,:,3) =

0.5012    -3.5328
0.4551    2.1314
-1.5956    3.4161

(:,:,4) =

-0.12    -3.28
-0.51    -2.14
-1.56    -3.61


(:,:,5) =

6.5012    3.538
0.4551    0.314
-0.5956    0.411

输出,比方说除第四个维度之外的所有维度

0.3168    3.1825
1.5841    1.5766
-0.7892    3.0073
-0.2131    3.9708
2.9435    0.4964
-0.2131    2.5985
0.5012    -3.5328
0.4551    2.1314
-1.5956    3.4161
6.5012    3.538
0.4551    0.314
-0.5956    0.411

2 个答案:

答案 0 :(得分:2)

您可以通过巧妙地使用reshape以及建立索引来实现所需的功能。另外,您将需要使用permute(用于切换尺寸),因为您希望保持每个“切片”的完整性。

首先,很高兴知道您可以使用索引排除第四个切片。考虑以下示例:

A = randi(100,3,2,5)
idxdim3 = [1,2,3,5];     % Create an array of integers corresponding to the slices you want
B = A(:,:,idxdim3)       % Extract all the slices you want, discarding the 4th

在这种情况下,这将为您提供[3 x 2 x 4]大小的数组。接下来,您可以尝试使用reshape,但是会遇到问题。 reshape在维度上不断发展,列是第一个维度,行是第二个维度,“切片”是第三个维度。如您所说,您希望按顺序将每一行中的列保持不变,但是reshape会更改它们,然后再开始在三维空间中工作。因此,我们需要首先使用permute使第二维和三维开关位置:

% Leave 1 as the first dimension, but switches dimensions 2 and 3 around:
C = permute(B,[1 3 2]);      

现在我们可以reshape调整为适当的大小:

D = reshape(C,[12 2 1]);

应该为您提供所需的结果。当然,我们可以将大多数这些语句合并为一行,如下所示:

A = randi(100,3,2,5);  % Put your data here instead
idxdim3 = [1,2,3,5];
B = reshape( permute( A(:,:,idxdim3), [1 3 2]), 12, 2);

注意:如果将来要使用其他尺寸的A,则可以指定其他尺寸,让reshape计算其中一个尺寸。以下内容也将起作用:

B = reshape( permute( A(:,:,idxdim3), [1 3 2]), [], 2);

reshape将为您计算12

示例输出:

A(:,:,1) =
44    80
39    19
77    49
A(:,:,2) =
45    76
65    28
71    68
A(:,:,3) =
66    50
17    96
12    35
A(:,:,4) =
59    26
23    51
76    70
A(:,:,5) =
90    14
96    15
55    26

B =
44    80
39    19
77    49
45    76
65    28
71    68
66    50
17    96
12    35
90    14
96    15
55    26

答案 1 :(得分:0)

您需要结合使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="control" id="spa"> Content </div> <div class="control" id="test"> <div class="method"> <a href="#" class="getid">Getid</a> </div> </div> <div class="control" id="awesome"> Content </div> Js:permute

reshape