如何将矢量重塑为sqare矩阵?

时间:2015-07-15 17:59:20

标签: matlab matrix reshape

我有一个特定大小的矢量,我想将其重塑为方形矩阵。这是一个例子:假设向量大小为784.然后我将创建一个大小为28x28的矩阵。在Matlab中,我会使用以下命令执行此操作:

reshape(x,28,28)

当然,有可能无法获得精确的方阵。在这种情况下,矩阵应尽可能为方形。

我该怎么做这个计算?这意味着如何计算a中的值breshape(x,a,b)

3 个答案:

答案 0 :(得分:2)

a开始,等于numel(x)的平方根向下舍入。如果该数字未划分numel(x),请减去1并重试。这样一来,a等于sqrt(x)的最接近整数(从下面)除以numel(x)b将为numel(x)/a,但您只需使用[]作为reshape的第三个参数:

a = floor(sqrt(numel(x)));
while mod(x,a)
    a = a-1;
end
result = reshape(x,a,[]);

示例:

x = 1:20;

给出

result =
     1     5     9    13    17
     2     6    10    14    18
     3     7    11    15    19
     4     8    12    16    20

答案 1 :(得分:0)

找到整数的最接近因子并不是一个简单的问题。您需要使用问题Input an integer, find the two closest integers which, when multiplied, equal the input的MATLAB答案。从该问题中,如果您使用提供函数findIntegerFactorsCloseToSquarRoot的答案,则可以使用以下代码重新整形。

[a, b] =  findIntegerFactorsCloseToSquarRoot(numel(x));
reshape(x, a, b);

答案 2 :(得分:0)

我建议您先background: white !important; 检查号码是否为素数。

然后,您可以使用isprime(784)来获取数字的整数分解。 (根据MATLAB版本,您可以使用prime_factors = factor(784)

其他人只需要对ifactor(784)进行更多的工作。