我有一个以几十个 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 语句,但我只能让最后的零消失
这也应该有效:
newArray = oldArray(oldArray>0);
matlab 中的 find 命令解决了这个问题。尝试:
如果a = [0 0 0 2 3 4 2 0 0 0];
那么
a(find(a==0))=[];
或者
a(a==0)=[];
在没有 for 循环的情况下删除零
假设您只想切断前导零和尾随零,您将需要一个不去除中间零的解决方案。在这种情况下,我会建议以下内容:
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'))
“逻辑索引”是执行此类操作的最有效方式。
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
甚至,为了减少唾手可得的努力并且可以说难以理解,利用一种认为与......0
相同的语言not true
myvector(find(myvector))
仅返回 的非0
元素myvector
。