我想在matlab中删除所有满足一定条件的点

2mbi3lxu  于 2023-01-31  发布在  Matlab
关注(0)|答案(1)|浏览(467)

current plot
我想删除所有位于x轴5 & 10和y轴0 & 500之间的数据点。
givenData是一个包含数据的10000X2矩阵。
我写了下面的代码。我犯了什么错误?还有更好的方法吗?

for i=1:10000
    if givenData(i,1)>5 && givenData(i,1)<10 && givenData(i,2)>0 && givenData(i,2)<500
        givenData(i,:) = [];
    end    
end    

plot(givenData(:,1),givenData(:,2),'b.','MarkerSize',5);hold
contour(xgrid,ygrid,Z,[4e-5, 4e-5],'EdgeColor',[1 0 0],'ShowText','on','LineWidth',2);

任何帮助我都感激不尽。谢谢。

zqry0prt

zqry0prt1#

在迭代数组时,您将从数组中删除元素,因此下一个元素将移到删除点,并跳过检查。
要解决此问题,可以完全跳过循环并使用逻辑索引:

givenData(givenData(:,1)>5 & givenData(:,1)<10 & givenData(:,2)>0 & givenData(:,2)<500,:) = [];

或向后迭代数组:

for i = 10000:-1:1

一般来说,避免循环可以让MATLAB更快地执行操作,但代价是索引数组需要更多的内存来处理。

相关问题