Matlab 如何将向量重塑为sqare矩阵?

Matlab 如何将向量重塑为sqare矩阵?,matlab,matrix,reshape,Matlab,Matrix,Reshape,我有一个特定大小的向量,我想把它重塑成一个方阵。下面是一个例子:假设向量的大小为784。然后我将创建一个大小为28x28的矩阵。在Matlab中,我将使用以下命令执行此操作: reshape(x,28,28) 当然,有可能不可能有一个精确的方阵。在这种情况下,矩阵应尽可能方形 我怎样计算呢?这意味着如何计算重塑(x,a,b)中的a和b值?找到整数的最接近因子不是一个简单的问题。你需要使用MATLAB来回答这个问题。从这个问题开始,如果您使用提供函数findintegerfactorsclose

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

reshape(x,28,28)
当然,有可能不可能有一个精确的方阵。在这种情况下,矩阵应尽可能方形


我怎样计算呢?这意味着如何计算
重塑(x,a,b)
中的
a
b
值?

找到整数的最接近因子不是一个简单的问题。你需要使用MATLAB来回答这个问题。从这个问题开始,如果您使用提供函数
findintegerfactorsclosetosquaroot
的答案,您可以使用以下代码来重塑

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

a
开始,等于
numel(x)
的平方根向下舍入。如果该数字未除以
numel(x)
,请减去
1
,然后重试。这样一来,您将以
a
结束,该a等于除以
numel(x)
的最接近
sqrt(x)
(从下面开始)的整数
b
将是
numel(x)/a
,但您可以简单地使用
[]
作为
重塑的第三个参数:

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

x = 1:20;
给予

一种可能的办法:

x = rand(1, 784);
divisors = find(rem(numel(x), 1:numel(x)) == 0);
[~, idx] = min(abs(divisors - sqrt(numel(x))));
x = reshape(x, divisors(idx), numel(x) / divisors(idx));
让我解释一下:

假设有一个名为
x
的向量:

x = rand(1, 784);
divisors = find(rem(numel(x), 1:numel(x)) == 0);
首先,您可以找到
x
大小的除数:

x = rand(1, 784);
divisors = find(rem(numel(x), 1:numel(x)) == 0);
然后,继续选择最接近
x
大小平方根的除数:

[~, idx] = min(abs(divisors - sqrt(numel(x))));
最后,使用该除数(以及相应的倍数)重塑
x


我建议您首先通过
isprime(784)
检查数字是否为素数

然后您可以使用
prime\u factors=factor(784)
来获得数字的整数分解。(根据MATLAB版本的不同,您可以使用
ifactor(784)


其余的只需要在
prime\u factors

上多做一点工作,谢谢。但你的例子中n是什么?@对不起。它应该是
a
。现在更正