首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab:如何重新排序(重组)矩阵

Matlab:如何重新排序(重组)矩阵
EN

Stack Overflow用户
提问于 2014-04-10 16:30:09
回答 4查看 271关注 0票数 2

我有一个随机列矩阵:

代码语言:javascript
运行
复制
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的值做同样的操作。我知道这样做的一个方法是:

代码语言:javascript
运行
复制
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

但显然,这是非常麻烦的做了不止几次。有没有更有效率的东西?

循环应该是容易的,但我做得不对,这似乎(我知道为什么这可能不起作用,但我不能纠正它)。

(以下是我尝试过的:)

代码语言:javascript
运行
复制
n = 10;
for i = 1:10
a = [r(i:n:numel(r))];
end

如有任何建议或帮助,敬请见谅。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-10 16:35:20

你可以这样做:

代码语言:javascript
运行
复制
r = reshape(reshape(r, 10, 30)', 300, 1)

编辑:

正如@LuisMendo在评论中指出的那样,使用.''转换矩阵更安全,因为如果矩阵是复杂的,就会引入复杂的共轭。那么,这样做会更安全:

代码语言:javascript
运行
复制
r = reshape(reshape(r, 10, 30).', 300, 1)
票数 4
EN

Stack Overflow用户

发布于 2014-04-10 16:33:52

试试这个-

代码语言:javascript
运行
复制
intv = 10; %%// Interval after which you intend to get the values consecutively
out = r(reshape(reshape(1:numel(r),intv,[])',1,[]))
票数 1
EN

Stack Overflow用户

发布于 2014-04-10 16:34:38

您可以将其重组为30x10矩阵,转置,然后取平索引:

代码语言:javascript
运行
复制
A = 1:300;
A = reshape(A,30,10);
A = A';
A = A(:);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22993764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档