Distance between elements of two matrices

Hi everybody,
I am a new MATLAB user and I have a question about how to compute a distance measure between different elements of two matrices. Let me be clearer and expose my problem as follows:
I have two matrices, X and Y, which dimensions are the same, say m-by-n (2 dimensions). X and Y contains both just 1 zero-element per row and the other elements are non-zero (it could be anything but zeros); the zero-element can be anywhere within each row and is not necessarily "located" in the same cell in X and Y. I would like to compare the "location" of each zero-element by row between X and Y, and then compute how distant they are between each-other. I actually want to know how many cells are there in-between each zero-element. Hence, I would like the distance between coordinates (in each row) and not some measure of distance between the actual value of the different elements.
I hope my post is clear enough! Thanks a lot for any help!

 Akzeptierte Antwort

Matt Tearle
Matt Tearle am 13 Okt. 2011

0 Stimmen

I think this is what you're after. It's a bit brute-force, but I can't think of a neater, vectorized way.
% Make some matrices
n = 4;
M = magic(n);
A = 1-bsxfun(@eq,M,max(M,[],2))
B = ones(n);
B(n:n-1:end-1) = 0
% Actual code:
f = @(k) abs(find(A(k,:)==0,1,'first')-find(B(k,:)==0,1,'first'));
arrayfun(f,1:size(A,1))
If you don't like arrayfun, feel free to replace it with a for-loop (which is all I'm really doing):
d = zeros(size(A,1),1);
for k = 1:size(A,1)
d(k) = abs(find(A(k,:)==0,1,'first')-find(B(k,:)==0,1,'first'));
end

3 Kommentare

Sean de Wolski
Sean de Wolski am 13 Okt. 2011
As long as there is at least one zero and at least one one:
[junk idxA] = min(A,[],2);
[junk idxB] = min(B,[],2);
abs(idxA-idxB).'
Maybe?
Matt Tearle
Matt Tearle am 13 Okt. 2011
Yeah, the problem statement seemed to imply that the structure was fairly well guaranteed.
Greg Heath
Greg Heath am 14 Okt. 2011
Since the original post seems to allow negative values, use
min(abs(A),[],2) etc.
Hope this helps
Greg

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Arnaud Joye
Arnaud Joye am 14 Okt. 2011

0 Stimmen

Brilliant! Thanks a lot guys, the two codes are working beautifully and it is exactly what I am after! You saved me precious time since I was struggling quite hard on this issue.
Thanks again!

Kategorien

Mehr zu MATLAB finden Sie in Hilfe-Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by