How to calculate distance between array elements?

Hi, Let say I have this array:
A = [1 3 5 1 4 1 2 6 1]
the distances between elements are:
1-3-5-1:
1 to 3 = 2
3 to 5 = 1
5 to 1 = 3
1-4-1:
1 to 4 = 2
4 to 1 = 1
1-2-6-1:
1 to 2 = 3
2 to 6 = 1
6 to 1 = 2
what I need is to accumulate the distance of elements between every two ones, and if the distance between every two ones is greater than 5 then a penalty of 3 should be added to the total distance of the whole array. For example the distance between 1-3-5-1 = 6, so in this case, a penalty of 3 should be added to the total distance and so on.

5 Kommentare

1-3 = 2
Ok... I'd say it's -2 but let's not worry about the sign
3-5 = 1
5-1 = 3
Huh? What sort of math is that?
Sorry, I didn't explain well, 1-3 means the distance from 1 to 3 and same for others.
Guillaume, go head you can answer now.
I'm not any clearer. How is the distance from 3 to 5 not equal to 2? And from 5 to 1 not equal to 4?
don't focus on numbers its just example if you know how to do the coding please answer, otherwise leave it.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Matt J
Matt J am 9 Apr. 2018
Bearbeitet: Matt J am 9 Apr. 2018
I too find the post hard to interpret, but maybe this is what you want:
A = [1 3 5 1 4 1 2 6 1];
dist=cumsum([0 2 1 3 2 1 3 1 2]); %distances from start
onelocs=find(A==1);
D=dist(onelocs(2:end)) - dist(onelocs(1:end-1)); %distance between ones
totalDistance=dist(end) + 3*sum(D>5)

Weitere Antworten (0)

Kategorien

Mehr zu Operators and Elementary Operations finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by