我有一个数组,从几十个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语句,但我只能在最后得到零消失
答案 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)
甚至,为了减少指尖上的努力并且可以说理解力较差,可以利用一种认为0
与not true
相同的语言......
myvector(find(myvector))
仅返回0
的非myvector
元素。