【发布时间】:2016-08-03 09:05:50
【问题描述】:
给定一个向量:
a = [0;0;2;3;0;2;10;11;0;0;0;4;5;8;0;0;0]
任何人都可以展示或建议一种方法来删除所有零值,除了那些侧面非零值的值吗?
上述的期望结果是:
b = [0;2;3;0;2;10;11;0;0;4;5;8;0]
这些值已被删除:
[0;0;2;3;0;2;10;11;0;0;0;4;5;8;0;0;0]
我不知道从哪里开始解决这个问题,而不必求助于使用一组 IF 语句,例如:
for k=1:length(a)
if a(k) == 0 && a(k+1) == 0
*delete value*
end
if a(k) == 0 && a(k+1) >0
*keep/store value*
end
if a(k) > 0
*keep/store value*
end
if a(k) == 0 && a(k-1) >0
*keep/store value*
end
end
等等。
【问题讨论】:
-
如果您的非零数字都不是成对出现,您可以使用
diff- 否则您仍然可以使用diff(更智能)。我刚刚意识到,如果有连续的零你只想删除 1? -
任何在其左侧或右侧具有非零值的零值都将被保留 - 其余的将被删除。如果有 3 个或更多连续的零,则将删除至少 1 个,例如 [4, 8, 0, 0, 0, 0, 10] - 输出将简单地为: [4, 8, 0, 0, 10 ] - 保留符合上述条件的两个零。
-
@AnnaSchumann 如果您对解决问题的高尔夫解决方案感兴趣,see here。