我如何重塑2d数组到3d数组与最后一列被用作页面?在array2d中找到的所有数据都应该在pages
中的例子:
array2d=[7,.5,12; ...
1,1,1; ...
1,1,1; ...
4,2,4; ...
2,2,2; ...
2,2,2; ...
3,3,3; ...
3,3,3; ...
3,3,3];
数组中的第一页应该是7、5、12;1, 1, 1;1, 1, 1;
数组中的第二页应该是4、2、4;2、2、2;2, 2, 2,
数组中的第三页应该是3, 3, 3;3, 3, 3;3, 3, 3,
这是一个9x3数组我怎么能得到它是一个9x3x?(不确定这个数字应该是什么,所以我放置了一个问号作为占位符)多维数组?
我想要的是拥有所有的1都在一个维度/页面上,所有的2都在另一个维度/页面上,等等…-
我尝试了重塑(array2d,[9,3,1])它仍然是9x3
使用 permute
与 reshape
-
N = 3; %// Cut after every N rows to form a "new page"
array3d = permute(reshape(array2d,N,size(array2d,1)/N,[]),[1 3 2]) %// output
假设矩阵的每个切片的维数相同,我们可以很容易地做到这一点。让我们把每个切片的行数和列数分别称为M
和N
。在您的示例中,这将是M = 3
和N = 3
。因此,假设array2d
是上述形式,我们可以执行以下操作:
M = 3;
N = 3; %// This is also simply the total number of columns we have,
%// so you can do size(array2d, 2);
outMatrix = []; %// Make this empty. We will populate as we go.
%// Figure out how many slices we need
numRows = size(array2d,1) / M;
for k = 1 : numRows
%// Extract the k'th slice
%// Reshape so that it has the proper dimensions
%// of one slice
sliceK = reshape(array2d(array2d == k), M, N);
%// Concatenate in the third dimension
outMatrix = cat(3,outMatrix,sliceK);
end
根据你的例子,我们得到:
>> outMatrix
outMatrix(:,:,1) =
1 1 1
1 1 1
1 1 1
outMatrix(:,:,2) =
2 2 2
2 2 2
2 2 2
outMatrix(:,:,3) =
3 3 3
3 3 3
3 3 3
如果每个切片共享相同的维度,则该方法应该泛化到每个切片的任意行数和列数。
你的数组在第三维度上的大小已经是1(换句话说,它已经是9x3x1,为了证明这一点,尝试输入array2d(1,1,1))。如果你想在三维上连接二维矩阵,你可以使用cat.
例如:a = [1,2;3,4];
b = [5,6;7,8];
c = cat(3,a,b);
c将是一个2x2x2矩阵
这段代码是专门针对这个例子的,我希望你能理解如何去做其他的数据样本。
out2 = [];
col = size(array2d,2);
for i = 1:3
temp2 = reshape(array2d(array2d == i),[],col);
out2 = cat(3,out2,temp2);
end