MATLAB函数在零之前返回数组的一部分

时间:2017-09-18 00:00:13

标签: arrays matlab

我试图创建一个接收数组的函数,并在零之前返回数组的一部分。例如,[12, -4, 5, 32, 0, 4, 1, -8]将返回[12, -4, 5, 32],如果数组不包含零,则返回整个数组。

这是我到目前为止所拥有的:

function V = Notzero(V)
  V(V==0)=[];
end

我是MATLAB的新手。我相信我所写的内容会返回没有零的数组,但我不确定如何继续。

3 个答案:

答案 0 :(得分:5)

这是一个选项,它可以清除从向量的第一个零到结尾的所有内容:

function V = Notzero(V)
  V(find(V == 0, 1):end) = [];
end

有关详细信息,我建议您阅读matrix indexing,特别是colon operatorend关键字和find功能。

答案 1 :(得分:2)

这是一种方式(但我更喜欢@gnovice's answer):

result = V(cumprod(V~=0)~=0);

示例:

>> V = [12, -4, 5, 32, 0, 4, 1, -8];
>> result = V(cumprod(V~=0)~=0)
result =
    12    -4     5    32

>> V = [20 40 30 10];
>> result = V(cumprod(V~=0)~=0)
result =
    20    40    30    10

答案 2 :(得分:0)

试试这个:

V = [12, -4, 5, 32, 0, 4, 1, -8];
idx = find(V==0);
V = V(1:idx-1);