首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在具有可变积分长度的二维阵列上进行数值积分的有效方法

在具有可变积分长度的二维阵列上进行数值积分的有效方法
EN

Stack Overflow用户
提问于 2016-12-17 02:36:56
回答 1查看 187关注 0票数 1

我问了一个关于在固定长度的2d数组上进行数值积分的问题here。现在,如果积分长度不是固定的呢?对于每个单元格作为起点,我希望保持积分,直到它遇到一个具有相反符号的单元格。假设在一列中从下到上是[1,2,5,4,-2,-3,2],如果我对第一个元素进行积分,它将对前四个元素进行积分(它们都是正数)。如果我从第五个元素开始,它将只集成-2-3。有没有什么方法可以将其矢量化或加速,而不是使用double for循环首先找到每个单元的积分长度,然后进行积分?

或者一个简化的问题只是集成积极的元素:示例:

代码语言:javascript
运行
复制
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]
EN

回答 1

Stack Overflow用户

发布于 2016-12-18 02:40:48

一种基于MATLAB的矢量化方法

代码语言:javascript
运行
复制
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,:))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41190507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档