我有一个特定大小的矢量,我想将其重塑为方形矩阵。这是一个例子:假设向量大小为784.然后我将创建一个大小为28x28的矩阵。在Matlab中,我会使用以下命令执行此操作:
reshape(x,28,28)
当然,有可能无法获得精确的方阵。在这种情况下,矩阵应尽可能为方形。
我该怎么做这个计算?这意味着如何计算a
中的值b
和reshape(x,a,b)
?
答案 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)
进行更多的工作。