我正在尝试存储矢量。当我在循环中运行程序时,我看到了所有的值,但是当在循环外引用时,只评估和存储最后一个向量(以质数953结尾的那个,见下文)。使用PVX
向量进行的任何计算仅使用最后一个条目完成。我希望PVX
使用所有结果进行计算,而不仅仅是最后一个条目。如何存储这些结果以使用?
这是代码:
PV=[2 3 5 7 11 13 17 19 23 29];
for numba=2:n
if mod(numba,PV)~=0;
xp=numba;
PVX=[2 3 5 7 11 13 17 19 23 29 xp]
end
end
前几个结果如下:
PVX
:Prime矢量(结果)
PVX =
2 3 5 7 11 13 17 19 23 29 31
PVX =
2 3 5 7 11 13 17 19 23 29 37
PVX =
2 3 5 7 11 13 17 19 23 29 41
PVX =
2 3 5 7 11 13 17 19 23 29 43
PVX = ...........................................................
PVX =
2 3 5 7 11 13 17 19 23 29 953
答案 0 :(得分:2)
我假设你要这样做:
PVX=[2 3 5 7 11 13 17 19 23 29];
for numba=2:n
if mod(numba,PVX)~=0;
xp=numba;
PVX(end+1) = xp;
%// Or alternatively PVX = [PVX, xp];
end
end
但是如果你可以估计最终PVX的大小,你应该首先预先分配数组以获得显着的加速。
答案 1 :(得分:2)
所以,看起来你需要所有素数到n
正如Dan所说:
PVX=[2 3 5 7 11 13 17 19 23 29 ];
for numba=2:n
if mod(numba,PVX)~=0
xp=numba;
PVX=[ PVX xp];
end
end
或者为什么不简单地使用primes
函数?
PVX = primes( n ) ;
答案 2 :(得分:2)
如果要存储所有PVX
值,请为每个值使用不同的行:
PV = [2 3 5 7 11 13 17 19 23 29];
PVX = [];
for numba=2:n
if mod(numba,PV)~=0;
xp = numba;
PVX = [PVX; 2 3 5 7 11 13 17 19 23 29 xp];
end
end
当然,如果将PVX
矩阵初始化为合适的大小会更好,但行数很难预测。
或者,构建PVX
无循环:
xp = setdiff(primes(n), primes(29)).'; %'// all primes > 29 and <= n
PVX = [ repmat([2 3 5 7 11 13 17 19 23 29], numel(xp), 1) xp ];
例如,对于n=100
,上述任一方法都会给出
PVX =
2 3 5 7 11 13 17 19 23 29 31
2 3 5 7 11 13 17 19 23 29 37
2 3 5 7 11 13 17 19 23 29 41
2 3 5 7 11 13 17 19 23 29 43
2 3 5 7 11 13 17 19 23 29 47
2 3 5 7 11 13 17 19 23 29 53
2 3 5 7 11 13 17 19 23 29 59
2 3 5 7 11 13 17 19 23 29 61
2 3 5 7 11 13 17 19 23 29 67
2 3 5 7 11 13 17 19 23 29 71
2 3 5 7 11 13 17 19 23 29 73
2 3 5 7 11 13 17 19 23 29 79
2 3 5 7 11 13 17 19 23 29 83
2 3 5 7 11 13 17 19 23 29 89
2 3 5 7 11 13 17 19 23 29 97