簡體   English   中英

我想刪除 matlab 中滿足特定條件的所有點

[英]I want to remove all the points that satisfy certain condition in matlab

當前 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);

任何幫助表示贊賞。 謝謝你。

您在遍歷數組時正在刪除數組中的元素,因此下一個元素會轉移到已刪除的位置並在檢查中被跳過。

要解決此問題,您可以完全跳過循環並使用邏輯索引:

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

或向后遍歷數組:

for i = 10000:-1:1

一般來說,避免循環允許 MATLAB 更快地執行操作,權衡索引 arrays 需要更多的 memory 來處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM