重塑和重新排列数组
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
我有一个大数组,看起来像这样:
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