Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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
Matlab 以0分隔的列的各部分之和_Matlab_Sum - Fatal编程技术网

Matlab 以0分隔的列的各部分之和

Matlab 以0分隔的列的各部分之和,matlab,sum,Matlab,Sum,假设有一个矩阵,其中包含: 0 0 0 .... 0 A 0 0 .... 0 B 0 0 .... 0 C 0 0 .... 0 0 0 0 .... 0 D 0 0 .... 0 E 0 0 .... 0 如果我想获得一个具有输出的新数组: [A+B+C D+E] 你会怎么做?当然,我总是可以循环并检查0,但我想知道是否还有其他选择。用于生成分组值向量,然后进行求和: x = [0; 1; 2; 4; 0; 7; 3]; result = accumarray(cumsum(x==0

假设有一个矩阵,其中包含:

0 0 0 .... 0
A 0 0 .... 0
B 0 0 .... 0
C 0 0 .... 0
0 0 0 .... 0
D 0 0 .... 0
E 0 0 .... 0
如果我想获得一个具有输出的新数组:

[A+B+C   D+E]
你会怎么做?当然,我总是可以循环并检查0,但我想知道是否还有其他选择。

用于生成分组值向量,然后进行求和:

x = [0; 1; 2; 4; 0; 7; 3];
result = accumarray(cumsum(x==0) + (x(1)~=0), x);
给予

如果x不能以零开始,则需要+x1~=0部分。本部分确保:

x = [1; 2; 4; 0; 7; 3];
结果是理想的

result =
     7
    10
使用上述方法,每个零开始一个新组。那么,为了

x = [0; 1; 2; 4; 0; 7; 3; 0; 0; 5; 0];
结果是

result =
     7
    10
     0
     5
     0
如果希望每次运行一个或多个零来启动一个新组:首先折叠x中的连续零,然后应用上述方法:

x = [0; 1; 2; 4; 0; 7; 3; 0; 0; 5; 0];
ind = [true; x(2:end)~=0 | x(1:end-1)~=0]; % index to remove a zero if preceded by zero
t = x(ind);
result = accumarray(cumsum(t==0) + (x(1)~=0), t);
给予


该计算是否应仅在第一列上进行?其他列呢?它应该在每一列中进行,但我在考虑对列的数量进行循环,因为列的数量与行的数量相比很小。。。符号或数字?所有列的组数是否相同?Hazem数字。Luis Not necessary它给了我一个错误:error:accumarray:维度与您的示例不匹配。我用的是八度音阶。“可能是因为它吗?”向大师们学习抱歉,老师。“不应该在那儿。”。你现在能查一下吗?行!尽管如果列的第一个值不是0,但您会得到一个错误:error:accumarray:index必须是正整数,这是我没有想到的。我认为如果x1不是0,加1就很容易解决;现在请看
x = [0; 1; 2; 4; 0; 7; 3; 0; 0; 5; 0];
ind = [true; x(2:end)~=0 | x(1:end-1)~=0]; % index to remove a zero if preceded by zero
t = x(ind);
result = accumarray(cumsum(t==0) + (x(1)~=0), t);
result =
     7
    10
     5
     0