我有一个随机列矩阵:
r = rand(1,300)';我想重新排序它,这样,不再有按1,2,3顺序排列的元素,而是有元素1,11,21,31,...,291,2,12,22,32,...,292,3,13,33,...293,...,300。
换句话说,我想取每10个值,从1开始,把它们按这个顺序排列,然后对2和10的值做同样的操作。我知道这样做的一个方法是:
n = 10;
r = [r(1:n:numel(r)); r(2:n:numel(r)); r(3:n:numel(r));...;r(10:n:numel(r))]; % Skipped 4-9 in this example但显然,这是非常麻烦的做了不止几次。有没有更有效率的东西?
循环应该是容易的,但我做得不对,这似乎(我知道为什么这可能不起作用,但我不能纠正它)。
(以下是我尝试过的:)
n = 10;
for i = 1:10
a = [r(i:n:numel(r))];
end如有任何建议或帮助,敬请见谅。
发布于 2014-04-10 16:35:20
你可以这样做:
r = reshape(reshape(r, 10, 30)', 300, 1)编辑:
正如@LuisMendo在评论中指出的那样,使用.'比'转换矩阵更安全,因为如果矩阵是复杂的,就会引入复杂的共轭。那么,这样做会更安全:
r = reshape(reshape(r, 10, 30).', 300, 1)发布于 2014-04-10 16:33:52
试试这个-
intv = 10; %%// Interval after which you intend to get the values consecutively
out = r(reshape(reshape(1:numel(r),intv,[])',1,[]))发布于 2014-04-10 16:34:38
您可以将其重组为30x10矩阵,转置,然后取平索引:
A = 1:300;
A = reshape(A,30,10);
A = A';
A = A(:);https://stackoverflow.com/questions/22993764
复制相似问题