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