0

我有一个以几十个 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 语句,但我只能让最后的零消失

4

5 回答 5

4

这也应该有效:

newArray = oldArray(oldArray>0);
于 2013-08-17T00:20:42.333 回答
2

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

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

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

或者

a(a==0)=[];

在没有 for 循环的情况下删除零

于 2013-08-17T00:20:55.060 回答
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'))
于 2013-08-19T08:59:53.803 回答
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
于 2013-08-17T03:15:27.373 回答
0

甚至,为了减少唾手可得的努力并且可以说难以理解,利用一种认为与......0相同的语言not true

myvector(find(myvector))

仅返回 的非0元素myvector

于 2013-08-17T17:49:31.920 回答