根据另一个矩阵中的排列构造矩阵

发布于 2024-10-19 05:17:38 字数 582 浏览 1 评论 0原文

我有一个维度为(mxn)的矩阵“eff_tot”,我想根据名为“matches”的矩阵重新排列它(例如[n2 n3; n4 n5])并将所有未指定的列放在末尾有“匹配”。

也就是说,我想要 [eff_tot(:,n2) eff_tot(:,n3) ; eff_tot(:,n4) eff_tot(:,n5) ; eff_tot(:,n1)]

这就是大家!

以第一个答案中的例子为例,我想要的是:

eff_tot =

81    15    45    15    24
44    86    11    14    42
92    63    97    87     5
19    36     1    58    91
27    52    78    55    95
82    41     0     0     0
87     8     0     0     0
 9    24     0     0     0
40    13     0     0     0
26    19     0     0     0

问候。

I have a matrix 'eff_tot' with dimension (m x n) which I want to rearrange according to a matrix called 'matches' (e.g. [n2 n3; n4 n5]) and put all the collumns not specified in 'matches' at the end.

That is, I want to have [eff_tot(:,n2) eff_tot(:,n3) ; eff_tot(:,n4) eff_tot(:,n5) ; eff_tot(:,n1)].

That's all folks!

Taking the example in the first answer, what I would like to have is:

eff_tot =

81    15    45    15    24
44    86    11    14    42
92    63    97    87     5
19    36     1    58    91
27    52    78    55    95
82    41     0     0     0
87     8     0     0     0
 9    24     0     0     0
40    13     0     0     0
26    19     0     0     0

Regards.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

残龙傲雪 2024-10-26 05:17:38

创建一个向量,列出 eff_tot 中所有列的索引,然后使用 SETDIFF 确定哪些列不会出现在 [n2 n3 n4 n5] 中。这些列是无与伦比的。现在连接匹配和不匹配的列索引以创建列重新排序的 eff_tot 矩阵。

>> eff_tot = randi(100, 5, 7)

eff_tot =

    45    82    81    15    15    41    24
    11    87    44    14    86     8    42
    97     9    92    87    63    24     5
     1    40    19    58    36    13    91
    78    26    27    55    52    19    95

>> n2 = 3; n3 = 5; n4 = 2; n5 = 6;
>> missingColumn = setdiff(1:size(eff_tot, 2), [n2 n3 n4 n5])

missingColumn =

     1     4     7

>> eff_tot = [eff_tot(:,n2) eff_tot(:,n3) eff_tot(:,missingIndex); eff_tot(:,n4) eff_tot(:,n5) zeros(size(eff_tot, 1), length(missingIndex))];

eff_tot =

    81    15    45    15    24
    44    86    11    14    42
    92    63    97    87     5
    19    36     1    58    91
    27    52    78    55    95
    82    41     0     0     0
    87     8     0     0     0
     9    24     0     0     0
    40    13     0     0     0
    26    19     0     0     0

Create a vector listing the indices of all the columns in eff_tot and then use SETDIFF to determine which columns do not occur in [n2 n3 n4 n5]. These columns are the unmatched ones. Now concatenate the matched and unmatched column indices to create your column-reordered eff_tot matrix.

>> eff_tot = randi(100, 5, 7)

eff_tot =

    45    82    81    15    15    41    24
    11    87    44    14    86     8    42
    97     9    92    87    63    24     5
     1    40    19    58    36    13    91
    78    26    27    55    52    19    95

>> n2 = 3; n3 = 5; n4 = 2; n5 = 6;
>> missingColumn = setdiff(1:size(eff_tot, 2), [n2 n3 n4 n5])

missingColumn =

     1     4     7

>> eff_tot = [eff_tot(:,n2) eff_tot(:,n3) eff_tot(:,missingIndex); eff_tot(:,n4) eff_tot(:,n5) zeros(size(eff_tot, 1), length(missingIndex))];

eff_tot =

    81    15    45    15    24
    44    86    11    14    42
    92    63    97    87     5
    19    36     1    58    91
    27    52    78    55    95
    82    41     0     0     0
    87     8     0     0     0
     9    24     0     0     0
    40    13     0     0     0
    26    19     0     0     0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文