I am calculating Sorensen-Dice coefficient (2|A and B|/|A|+|B|) but diagonal elements (intersection with itself) of the square matrix is equal to zero. It is not a big problem but how can I convert them into ones. Thanks for the help.
v = [1 1 0 0 1 1 0; 1 1 0 1 0 0 0; 0 0 0 0 0 1 1]
d = squareform(pdist(v,@(a,b)(2 * sum((a.*b),2))./(sum(a) + sum(b,2))));

 Réponse acceptée

John D'Errico
John D'Errico le 7 Oct 2017
If the diagonal is already EXACTLY zero, then this will suffice:
M = M + eye(size(M));
If they are only approximately zero, then you could do this:
M(find(eye(size(M)))) = 1;
For example,
M = magic(5)
M =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
M(find(eye(size(M)))) = 1;
M
M =
1 24 1 8 15
23 1 7 14 16
4 6 1 20 22
10 12 19 1 3
11 18 25 2 1

1 commentaire

MB
MB le 7 Oct 2017
Modifié(e) : MB le 7 Oct 2017
Thank you for your reply. It is working but I still didn't understand why I get zeros instead of ones.

Connectez-vous pour commenter.

Plus de réponses (1)

James Tursa
James Tursa le 7 Oct 2017
Another way:
M(1:size(M,1)+1:end) = 1;

Catégories

En savoir plus sur Descriptive Statistics and Insights dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by