重塑和重新排列阵列

时间:2016-05-03 05:18:49

标签: arrays matlab reshape

我有一个大型数组,如下所示:

1
4
5
3
6
2
7
4
3

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

7 4 3
3 6 2
1 4 5

我的原始数组大小为13700x1,所以我不能手动完成,如果我使用重塑功能,数组会以错误的方式形成:

1 3 7
4 6 4
5 2 3

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

3 个答案:

答案 0 :(得分:4)

尝试

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

flipud(reshape(tmpArray, 3, 3).')

答案 1 :(得分:2)

  } catch (Exception e) {
     Log.e("MyApp", "Could not open data source", e);
  }

答案 2 :(得分:2)

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

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

  

已知尺寸的产品,3,不可分为总数   要素,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