如何将二维数组重新整形为3d数组,并将最后一列用作页面? 在array2d中找到的所有数据都应该在页面中
示例:
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? (不确定这个数字应该是什么,所以我把问号放在占位符上)多维数组?
我想要的是拥有 所有这些都将在一个维度/页面上,所有两个将是另一个维度/页面等... -
我尝试了重塑(array2d,[9,3,1]),它仍然是9x3
答案 0 :(得分:3)
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
答案 1 :(得分:2)
假设矩阵的每个切片的尺寸相同,我们可以很容易地做到这一点。我们分别调用每个切片必须分别为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
此方法应针对每个切片推广任意数量的行和列,前提是每个切片共享相同的维度。
答案 2 :(得分:0)
你的数组在第三维中已经是1的大小(换句话说,它已经是9x3x1,证明这个尝试输入array2d(1,1,1))。如果要沿第三维连接2d矩阵,可以使用cat。
例如:
a = [1,2;3,4];
b = [5,6;7,8];
c = cat(3,a,b);
c将是2x2x2矩阵。
答案 3 :(得分:0)
这段代码是针对此示例的,我希望您能够了解如何使用其他数据样本。
out2 = [];
col = size(array2d,2);
for i = 1:3
temp2 = reshape(array2d(array2d == i),[],col);
out2 = cat(3,out2,temp2);
end