2015-07-28 230 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