重塑和重新排列数组

Reshape and rearrange array

我有一个大数组,看起来像这样:

1
4
5
3
6
2
7
4
3

我想重新排列这个数组,使其看起来像这样:

7 4 3
3 6 2
1 4 5

我的原始数组大小为 13700x1,所以我无法手动完成,如果我使用 reshape 函数,数组的形状会错误:

1 3 7
4 6 4
5 2 3

我希望我的意图是明确的。谢谢!

尝试

tmpArray = [1
4
5
3
6
2
7
4
3]

flipud(reshape(tmpArray, 3, 3).')
x = [1,4,5,3,6,2,7,4,3]';
A = flipud(reshape(x,3,3)');

其他答案假设您的向量包含平方数的元素,4, 9, 16 ...。这对于示例向量是正确的,但对于您实际使用的向量则不然(根据问题,它是 13700x1)。

这意味着flipud(reshape())方法会报错:

Product of known dimensions, 3, not divisible into total number of elements, 13924.

如果您不想要方阵,这不是问题,因为数字可以表示为任何数字的乘积:2, 5, 137

如果您想要方阵,则需要用零、NaN 或其他内容填充向量。这可以通过以下方式完成:

A = randi(100,13700,1);        %% Random 13700x1 matrix
n = numel(A);                  %% Number of elements in A (13700 in this case)
elements = ceil(sqrt(n))^2;    %% Number of elements needed in order to make a square matrix
B = [A; zeros(elements-n,1)];  %% Pad the vectors with zeros.
                               %% You can also d0 B = [A; nan(elements-n,1)];
final_matrix = flipud(reshape(B, sqrt(elements),[]).');  %% Final operation