Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
105 lines (95 sloc) 3.5 KB
// Accord Math Library
// The Accord.NET Framework
// http://accord-framework.net
//
// Copyright © César Souza, 2009-2017
// cesarsouza at gmail.com
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
namespace Accord.Math.Distances
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using Accord.Compat;
using System.Threading.Tasks;
/// <summary>
/// Matching dissimilarity.
/// </summary>
///
[Serializable]
public struct Matching : IDistance<double[]>, IDistance<int[]>
{
/// <summary>
/// Computes the distance <c>d(x,y)</c> between points
/// <paramref name="x"/> and <paramref name="y"/>.
/// </summary>
///
/// <param name="x">The first point <c>x</c>.</param>
/// <param name="y">The second point <c>y</c>.</param>
///
/// <returns>
/// A double-precision value representing the distance <c>d(x,y)</c>
/// between <paramref name="x"/> and <paramref name="y"/> according
/// to the distance function implemented by this class.
/// </returns>
///
#if NET45 || NET46 || NET462 || NETSTANDARD2_0
[MethodImpl(MethodImplOptions.AggressiveInlining)]
#endif
public double Distance(int[] x, int[] y)
{
int tf = 0;
int ft = 0;
for (int i = 0; i < x.Length; i++)
{
if (x[i] == 1 && y[i] == 0) tf++;
if (x[i] == 0 && y[i] == 1) ft++;
}
return (tf + ft) / (double)(x.Length);
}
/// <summary>
/// Computes the distance <c>d(x,y)</c> between points
/// <paramref name="x"/> and <paramref name="y"/>.
/// </summary>
///
/// <param name="x">The first point <c>x</c>.</param>
/// <param name="y">The second point <c>y</c>.</param>
///
/// <returns>
/// A double-precision value representing the distance <c>d(x,y)</c>
/// between <paramref name="x"/> and <paramref name="y"/> according
/// to the distance function implemented by this class.
/// </returns>
///
#if NET45 || NET46 || NET462 || NETSTANDARD2_0
[MethodImpl(MethodImplOptions.AggressiveInlining)]
#endif
public double Distance(double[] x, double[] y)
{
int tf = 0;
int ft = 0;
for (int i = 0; i < x.Length; i++)
{
if (x[i] == 1 && y[i] == 0) tf++;
if (x[i] == 0 && y[i] == 1) ft++;
}
return (tf + ft) / (double)(x.Length);
}
}
}
You can’t perform that action at this time.