使用逻辑矩阵求和矩阵 - 索引超过矩阵维度

时间:2015-07-28 12:30:15

标签: matlab

我有两个矩阵。

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

当使用下面的代码行时,我收到Index超出矩阵维度的错误消息。我不知道这是怎么回事?

    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

1 个答案:

答案 0 :(得分:4)

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

我错过的是,当您以这种方式使用逻辑索引时,您正在挑选矩阵中可能在每列中包含不同数量元素的元素,因此MATLAB无法将格式良好的矩阵返回到{ {1}},然后返回一个向量。要解决这个问题,请使用nansum

这一事实
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值设置为零,然后调用sum函数。

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

dim