【问题标题】:aggregating matrix and cell array聚合矩阵和元胞数组
【发布时间】:2018-01-31 09:43:43
【问题描述】:

我将 3x3 矩阵 D 聚合为 2x2(将列/行 1 和 2 加在一起)。矩阵 D 的行和列的名称保存在 1x3 向量 m 中。 我正在寻找一种通过删除一个元素来聚合向量 M 的方法,使其大小为 2x1。

给定 3x3 矩阵 D:

D = 
 1 2 3
 4 5 6
 7 8 9  

和2x3聚合矩阵S:

S = 
 1 1 0
 0 0 1

我通过以下方式将 D 聚合为 2x2 矩阵:

D = S*D*S' 

D = 
 12 15   
  9  9  

列和行的名称存储在 3x1 向量 m 中。

m = 
 'A'   
 'B'
 'C'

我想删除元素 2 ('B'),所以最终输出如下所示:

m = 
 'A'   
 'C'

有什么建议吗?

【问题讨论】:

  • 为什么是第二个而不是第三个?删除元素可以通过m(2)=[] 完成
  • 第二个因为 m(1) + m(2) 但我只想保留 m(1) 的名称。您的解决方案可行,但我需要一些方法来知道我应该通过哪些索引,即我怎么知道它是 2 in m(2) ?
  • "第二个因为 m(1) + m(2)"
  • 你知道你添加了哪些行/列,所以你也知道在 m 中使用什么索引。

标签: matlab aggregation


【解决方案1】:

我假设您想要找到块对角矩阵块的左上角并返回它们的列索引。

例如对于以下矩阵:

11100      10000
11100      00000   
00010  =>  00010
00010      00000
00001      00001

结果将是[1 4 5]。

S = [1 1 0
     0 0 1];
m = {'A';'B';'C'};
sz = size(S);
h = diff([zeros(sz(1),1),S],1,2)>0;
v = diff([zeros(1,sz(2));S],1,1)>0;
[~,idx]=find(h&v);
result = m(idx)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2015-05-29
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2021-07-08
    相关资源
    最近更新 更多