我问了一个关于在固定长度的2d数组上进行数值积分的问题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]发布于 2016-12-18 02:40:48
一种基于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,:))https://stackoverflow.com/questions/41190507
复制相似问题