2016-12-16 54 views
1

我問了一個問題here關於在具有固定長度的二維數組上進行數值積分的問題。現在如果積分長度不固定呢?對於每個單元格作爲起點,我想保持整合直到它遇到一個單元格的值相反的符號。所以假設從下到上的一列是[1,2,5,4,-2,-3,2],如果我做了第一個元素的積分,它將整合前四個元素(它們都是正數)。如果我從第五個元素開始,它將只集成-2-3。有沒有什麼方法可以對它進行矢量化或加速,而不是使用double for循環來首先查找每個單元的積分長度,然後進行積分?在可變積分長度的二維數組上進行數值積分的有效方法

或者簡化的問題是僅僅集成的積極因素: 例如:

data = [ 
-2, -1, 4, -2,-1; 
1, 2, 3, 4, 5; 
5, -4, -3, 2, 5; 
3, -3, -9, 5, 7; 
2, -2, 7, -5, 1; 
2, 3, 1, -3, -3] 

integrated_data = [ 
0, 0, 7, 0, 0; 
13, 2, 3, 11, 18; 
12, 0, 0 7, 13; 
7, 0, 0, 5, 8; 
4, 0, 8, 0, 1; 
2, 3, 1, 0, 0] 
+1

請例如添加一個例子一個[5,5]矩陣和預期的輸出。 – rahnema1

+1

你問關於Matlab還是NumPy? – FTP

+0

爲什麼你在integrated_data的左上角有一個0?它不應該是-2嗎? – littleO

回答

0

在MATLAB甲矢量溶液

data = [ 
-2, -1, 4, -2,-1; 
1, 2, 3, 4, 5; 
5, -4, -3, 2, 5; 
3, -3, -9, 5, 7; 
2, -2, 7, -5, 1; 
2, 3, 1, -3, -3]; 
data1 = [-ones(1,size(data,2)) ;flipud(data)] 
df = find([-1 ;diff((data1(:))>=0)] == 1)-1; 
data1(data1<0) =0; 
c1 = cumsum(data1(:)); 
data1(df) = data1(df) - [0 ;diff(c1(df))]; 
c2 = cumsum(data1(:)); 
c2(data1==0)=0; 

c2=reshape(c2,size(data1)); 
result = flipud(c2(2:end,:))