2015-07-28 177 views
0

我有两个矩阵。使用逻辑矩阵的总和矩阵 - 索引超过矩阵的维数

  • 磁电容,其是双1698×2
  • index_g是一个逻辑1698×2

当使用的代码行下面我得到的指数超过矩阵尺寸的错误消息。我不明白这是怎么回事?

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

更新

抱歉,我应该提到,我需要在磁电容矢量

**数据的实施例**

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

回答

4

有每一列的总和这里有两个问题。我错过了一个。原始答案如下。

我错过的是当你以这种方式使用逻辑索引时,你正在挑选矩阵的元素,每列中可能有不同数量的元素,所以MATLAB不能将良好形成的矩阵返回给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函数在内部做,是把所有的NaN值设为零,然后调用SUM函数。


index_g == 1返回1698×2矩阵的逻辑,但你与结肠一个额外的维度添加。要对列进行求和,请使用可选的dim输入。你想要:

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

啊对不起,我应该提到,我想要在mcaps矩阵中的每列的总和 – mHelpMe

+0

是的,你应该有。看我的编辑。 – craigim

+0

,返回给我一个650 x1的双向量 – mHelpMe