【问题标题】:sum matrix using logical matrix - index exceeds matrix dimensions使用逻辑矩阵求和矩阵 - 索引超过矩阵维度
【发布时间】:2015-07-28 21:00:55
【问题描述】:

我有两个矩阵。

  • mcaps 是双 1698 x 2
  • index_g 是一个逻辑 1698 x 2

使用下面的代码行时,我收到索引超出矩阵维度的错误消息。不过我不明白这是怎么回事?

    tsp = nansum(mcaps(index_g==1, :));

更新

对不起,我应该提到我需要 mcaps 向量中每一列的总和

** 数据示例**

mcaps                   index_g
5      6                0      0
4      3                0      0
6      5                1      1
4      6                0      1
8      7                0      0

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这里有两个问题。我错过了一个。原始答案如下。

    我错过的是,当您以这种方式使用逻辑索引时,您会挑选出每列中可能具有不同数量元素的矩阵元素,因此 MATLAB 无法将格式正确的矩阵返回给 @ 987654321@,因此返回一个向量。要解决这个问题,请使用 0 + anything = 0

    % create a mask of values you don't want to sum. Note that since
    % index_g is already logical, you don't have to test equal to 1.
    mask = ~index_g & isnan(mcaps)
    
    % create a temporary variable
    mcaps_to_sum = mcaps;
    
    % change all of the values that you don't want to sum to zero
    mcaps_to_sum(mask) = 0;
    
    % do the sum
    sum(mcaps_to_sum,1);
    

    这基本上就是 nansum 函数在内部所做的所有事情,就是将所有 NaN 值设置为零,然后调用 sum 函数。


    index_g == 1 返回一个 1698 x 2 的逻辑矩阵,但是你用冒号添加了一个额外的维度。要对列求和,请使用可选的 dim 输入。你想要:

    tsp = nansum(mcaps(index_g == 1),1);
    

    【讨论】:

    • 啊抱歉我应该提到我想要 mcaps 矩阵中每一列的总和
    • 返回一个 650 x1 双向量
    • 抱歉,我的行和列总是搞混了。在维度 1 而不是维度 2 上求和。
    • 返回一个数字而不是两个
    猜你喜欢
    • 2012-09-25
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多