[英]Find sum distance to horizontal line for all points in Matlab
我有一個大約 30,000 pts 的散點圖,所有這些都位於我在圖中直觀定義的水平線上方。 我現在的目標是將所有這些點到這條水平線的垂直距離相加。
數據是從.csv
文件讀入並已保存到工作區,但我還需要檢查值是否為NaN
,並忽略這些。
這就是我現在所處的位置:
vert_deviation = 0;
idx = 1;
while idx <= numel(my_data(:,5)) && isnan(idx) == 0
vert_deviation = vert_deviation + ((my_data(idx,5) - horiz_line_y_val));
idx = idx + 1;
end
我知道使用&&
運算符的先決條件是我相信有兩個logical
語句,但我目前不確定如何以這種方式重寫此循環。 我也不明白為什么vert_deviation
返回NaN
,但我認為這可能與我描述的第一個錯誤有關......
我真的很感激這里的一些指導 - 在此先感謝您!
編輯:“水平線”是一個輕微的過度簡化 - 實際上我需要找到由 6 個不同線段組成的距離的下限
我應該指定我需要計算所有散點圖點的距離的下限因不同的 x 值而異(水平線片段是為了簡化,但可能會產生誤導......對此表示歉意)
我首先修改了我已經讀入工作區的數據,將所有NaN
值替換為0
。 接下來,我編寫了一個while
循環,它定義了要循環的索引數,並定義了一個&&
條件來過濾掉所有零。 然后我編寫了一個嵌套的if
循環,它檢查給定索引落入的 x 值范圍,然后獲取該圖部分的線性線下限的 y 值與給定點之間的增量。 我對所有點都重復了這一點。
while idx <= numel(my_data(:,3)) && not(my_data(idx,3) == 0)
...
if my_data(idx,3) < upper_x_lim && my_data(idx,5) > lower_x_lim
vert_deviation = vert_deviation + (my_data(idx,4) - (m6 * (my_data(idx,5)) + b6))
end
...
在這種情況下, m6
和b6
是為繪圖的一個部分計算的斜率和 y 截距。 if
循環對下限的每個部分重復六次。
我相信有更優雅的方法可以做到這一點,所以如果有改進的余地,我願意接受任何反饋!
您的循環不排除 NaN 值,因為isnan(idx) == 0
檢查索引是否為 NaN,而不是檢查數據點是否為 NaN。 相反,檢查isnan(my_data(idx,5))
。
此外,您可以使用for
而不是while
來簡化代碼:
vert_deviation = 0;
for idx=1:size(my_data,1)
if !isnan(my_data(idx,5))
vert_deviation = vert_deviation + ((my_data(idx,5) - horiz_line_y_val));
end
end
正如@Adriaan建議的那樣,您可以完全刪除循環,但似乎 OP 中的代碼過度簡化了問題。 查看發布的附加代碼,我想仍然可以刪除循環,但我不確定這是否會顯着提高速度。 只需使用一個循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.