如何让数组在matlab中启动并开始

时间:2013-08-17 00:14:15

标签: arrays matlab

我有一个数组,从几十个0开始,继续几个数字,然后以一些零结束。我想用数字而不是零来创建一个新数组。它看起来像这样

0 0 0 0 0 0 0 0 0 0 245 35635 3563 6346 3465 34 235 46 356 36 0 0 0 0 0 0 0 0 0 0 0

我想在matlab中创建一个像这样开始的数组

245 35635 3563 6346 3465 34 235 46 356 36

任何想法。我试图在一个循环中使用if语句,但我只能在最后得到零消失

5 个答案:

答案 0 :(得分:4)

这也应该有效:

newArray = oldArray(oldArray>0);

答案 1 :(得分:2)

matlab中的find命令解决了这个问题。尝试:

如果a = [0 0 0 2 3 4 2 0 0 0];

a(find(a==0))=[];

a(a==0)=[];

删除没有for循环的零

答案 2 :(得分:1)

“逻辑索引”是执行此类操作的最有效方式。

dataWithoutZeros = data(data ~= 0);

这是因为除了在MATLAB中索引矩阵的常用方法之外,通过指定一组索引位置,您还可以指定与数组具有相同维度的logical值数组

data = [10 20 30 40];
a = data([1 3]); % a has value [10 30]
b = data(logical([1 0 1 0])); % b has the same value as a

答案 3 :(得分:1)

假设您只想切断前导零和尾随零,那么您将需要一个不会消除中间零的解决方案。在这种情况下,我会建议如下:

x = [ 0 0 1 2 0 -3 0]
x(find(x,1,'first'):find(x,1,'last'))

会给:

1     2     0    -3

如果您担心精确度,请尝试以下方法:

x = [ 0 0 1 2 0 -3 0]
idx = abs(x)>1e-12
x(find(idx,1,'first'):find(idx,1,'last'))

答案 4 :(得分:0)

甚至,为了减少指尖上的努力并且可以说理解力较差,可以利用一种认为0not true相同的语言......

myvector(find(myvector))

仅返回0的非myvector元素。