Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 变积分长度二维阵列数值积分的有效方法_Arrays_Matlab_Numpy_Vectorization_Cumsum - Fatal编程技术网

Arrays 变积分长度二维阵列数值积分的有效方法

Arrays 变积分长度二维阵列数值积分的有效方法,arrays,matlab,numpy,vectorization,cumsum,Arrays,Matlab,Numpy,Vectorization,Cumsum,我问了一个关于在固定长度的二维阵列上进行数值积分的问题。如果积分长度不是固定的呢?对于作为起点的每个单元格,我希望不断积分,直到它遇到一个值为相反符号的单元格。因此,假设在一列中从下到上是[1,2,5,4,-2,-3,2],如果我对第一个元素进行积分,它将积分前四个元素(它们都是正的)。如果我从第五个元素开始,它将只集成-2和-3。有没有办法将其矢量化或加速,而不是使用双for循环,先找到每个单元的积分长度,然后再进行积分 或者一个简化的问题就是整合积极因素: 例如: MATLAB中的矢量化求解

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

或者一个简化的问题就是整合积极因素: 例如:


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,:))
数据=[
-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=[-one(1,大小(数据,2));flipud(数据)]
df=find([-1;diff((data1(:)>=0)]==1)-1;

data1(data1MATLAB中的矢量化解决方案

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,:))
数据=[
-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=[-one(1,大小(数据,2));flipud(数据)]
df=find([-1;diff((data1(:)>=0)]==1)-1;

data1(data1请添加一个示例,例如[5,5]矩阵和预期输出。您是在询问Matlab还是NumPy?为什么集成数据的左上角条目中有一个0?它不应该是-2吗?您的“集成数据”示例看起来像是应用
np.max(array,0)
然后使用
cumsum
。请添加一个示例,例如a[5,5]矩阵和预期输出。您是在询问Matlab还是NumPy?为什么集成数据的左上角条目中有一个0?它不应该是-2吗?您的“集成数据”示例看起来像是应用
np.max(array,0)
,然后使用
cumsum