dsearchn() Command is slowing down my algorithm, Any better Solution? MATLAB

I am using the following code to calculate altitude.
Data = [Distance1',Gradient];
Result = Data(dsearchn(Data(:,1), Distance2), 2);
Altitude = -cumtrapz(Distance2, Result)/1000;
Distance 1 and Distance 2 has different size with same values so I am comparing them to get corresponding value of Gradient to use with Distance 2.
Just to execute these 3 lines the Matlab takes 12 to 15 seconds. Which slow down my whole algorithm.
Is there any better way I can perform above action without slowing down my algorithm?

11 件のコメント

Bruno Luong
Bruno Luong 2018 年 10 月 26 日
Yeah of course, almost anything else is better, why on earth are you using DSEARCHN for numbers? Use INTERP1 with 'nearest' option.
Shahab Khan
Shahab Khan 2018 年 10 月 26 日
Can you please elaborate with an example in my case how should i use it?
Bruno Luong
Bruno Luong 2018 年 10 月 26 日
編集済み: Bruno Luong 2018 年 10 月 26 日
Other way around: first you give us a (small) example.
Shahab Khan
Shahab Khan 2018 年 10 月 26 日
編集済み: Shahab Khan 2018 年 10 月 26 日
I believe I already have given an example in my question about what i am trying to do.
Bruno Luong
Bruno Luong 2018 年 10 月 27 日
You give a piece of code, without telling the size the class of your Data. No one can run your code if copy/past in MATLAB. Almost useless for people who tries to answer the question.
An "example" is some extra instruction to generate a small piece data, (and eventually an expecting output if the code is buggy and does not produce what you expect).
Shahab Khan
Shahab Khan 2018 年 10 月 27 日
Apologies.
Here is my example.
Distance2= [1:10:1000]';
Distance1= [1:1:1000]';
Gradient= rand(1000,1);
Data= [Distance1,Gradient];
Result = Data(dsearchn(Data(:,1), Distance2), 2);
Bruno Luong
Bruno Luong 2018 年 10 月 27 日
編集済み: Bruno Luong 2018 年 10 月 27 日
Replace
dsearchn(Data(:,1), Distance2)
by
interp1(Distance1,Distance2,'nearest');
Shahab Khan
Shahab Khan 2018 年 10 月 27 日
This gives me distance values, I actually required gradient values from second column of Data corresponding to Distance1 in Data compared to Distance2 values.
For example, If Distance2 value is equal to Distance1 value in Data choose the corresponding value from second column in Data.
Shahab Khan
Shahab Khan 2018 年 10 月 27 日
This command worked actually.
Result = interp1(Data(:,2),Distance2,'nearest');
Thank you for your help
Bruno Luong
Bruno Luong 2018 年 10 月 27 日
編集済み: Bruno Luong 2018 年 10 月 27 日
I wrote replace just the DSEARCH, not the rest.
If you want to get the same Result as with
Data = [Distance1',Gradient];
Result = Data(dsearchn(Data(:,1), Distance2), 2);
and Data is just temporary variable and you don' mind to trash it away after, then
Result = interp1(Distance1,Gradient,Distance2,'nearest');
Shahab Khan
Shahab Khan 2018 年 10 月 27 日
Thank you.

サインインしてコメントする。

 採用された回答

Bruno Luong
Bruno Luong 2018 年 10 月 27 日
編集済み: Bruno Luong 2018 年 10 月 27 日
Replace
dsearchn(Data(:,1), Distance2)
by
interp1(Distance1,Distance2,'nearest');
If you want to get the same Result as with
Data = [Distance1',Gradient];
Result = Data(dsearchn(Data(:,1), Distance2), 2);
and Data is just temporary variable and you don' mind to trash it away after, then
Result = interp1(Distance1,Gradient,Distance2,'nearest');

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeData Type Identification についてさらに検索

製品

リリース

R2018a

質問済み:

2018 年 10 月 26 日

編集済み:

2018 年 10 月 27 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by