Vind euclidische afstand van twee matrix van verschillende lengte

stemmen
0

Ik wil Euclidische afstand tot gelijkenis van de snaren controleren vinden.

Database

Uit de afbeelding in een schilderij veldobject zijn er vele soorten afbeeldingen in de database. Afbeeldingen is de weergave van het gebruik van dit paining_objectveld. Nu wil ik gerelateerde afbeeldingen van een geselecteerde beeld te laten zien door het vergelijken van tekenreeksen uit paining_objecthet veld. Dus heb ik Euclidische afstand methode gebruikt om de overeenkomsten van de snaren te vinden.

Maar ik ben geconfronteerd probleem met de lengte. Voor ex. In eerste rij uit de database zijn er vier soorten van het paining_objectveld en op de tweede rij zijn er meer dan vier beeldtypen. Dus, hoe kan ik afstandsmaat deze werkwijze voor de arrays met ongelijke lengte.

De vraag is gesteld op 24/10/2019 om 11:57
bron van user
In andere talen...                            


3 antwoorden

stemmen
0

We kunnen de verhouding van het aantal string wedstrijden gebruiken om het totale aantal combinaties als de gelijkenis score.

// Assuming $firstArr and $secondArr are sets, i.e., don't contain duplicates
function similarityScore($firstArr, $secondArr) {
    $matchCount = 0;
    foreach ($firstArr as $first) {
        foreach($secondArr as $second) {
            if ($first == $second) {
                $matchCount++;
            }
        }
    }
    return $matchCount/(count($firstArr)*count($secondArr));
}
antwoordde op 24/10/2019 om 15:19
bron van user

stemmen
0

non gewone metriek

De afstand tussen twee geordende arrays kunnen worden geherformuleerd als afstand tussen de sets.

Een snelle lookup shows bestaat er verschillende afstanden die de gelijkenis tussen de sets zoals

  • de Jaccard afstand

    d (a, b) = | a inter b | / | A union b |

  • het maximale verschil statistiek

    d (a, b) = 1 - | a inter b | / Max (| a |, | b |)

er meer afstanden (bijvoorbeeld) op het papier Afstanden tussen setjes set comminality

nog Euclidische afstand

U kunt nog steeds dwingen:

Krijg al uw manga's als een woordenschat V, zeggen de grootte n. Denk aan de set R^n.

Een rij van de tabel kan worden voorgesteld als een vector vvan R^n: als de rij woord bevat i, put v[i] = 1, v[i]=0anders

Tenslotte wordt de euclidische afstand kan triviaal worden aangebracht op de vectoren van dezelfde lengte.

afstand aldus als

d(a,b) = || v_b - v_a ||_2 = sqrt( (v_b[0] - v_a[0])^2 + ... + (v_b[n-1] - v_a[n-1)^2)

Elke vierkante is gelijk aan 1iff v_b[i]!=v_a[i]dat u wilt de elementen in te tellen aniet in bU b not in aidem de symmetrische verschil van a en b Zo kunt u herschrijven uw afstand:

d(a,b) = sqrt(|a \ b|)
antwoordde op 25/10/2019 om 11:58
bron van user

stemmen
1

Ik heb dit gedaan met behulp van Jaccard afstand zoals hieronder. Eerst creëerde twee tafels voor unieke object van waar we object van id en tweede waar alle object samenkomt gescheiden van kan verzamelen (,)

1) image_sub_main Table

voer image beschrijving hier

2) image_main Tabel

voer image beschrijving hier

3) PHP bestand als Wordpress Way

global $wpdb;
$post_id = $wpdb->get_results("SELECT * FROM `image_main`");

$i=1;
$finimgarray = array();
$aa = array();
$bb = array();
$firstarray = array('similarity' =>100 , 'id' => $post_id[0]->id );

foreach($post_id as $key => $post){
    if($i < count($post_id)){
    $arraya =$post_id[0]->image_types;
    $a = explode(",",$arraya);
    $arrayb =$post_id[$i]->image_types;
    $b = explode(",",$arrayb);
    $array = array_unique (array_merge ($a, $b));
    $result=array_intersect($a,$b);
    $finalres = count($result) / count($array)*100 ;
    $finimgarray[] = array('similarity' =>round($finalres, 2) , 'id' => $post_id[$i]->id );
 }
    $i++;
}

array_push($finimgarray, $firstarray);
arsort($finimgarray);

foreach($finimgarray as $findimgarr){
  $id = $findimgarr['id'];
  $image = $wpdb->get_row("SELECT * FROM `image_main` WHERE `id` = $id ");
  echo "<img src='$image->image'/>";
}

Uw output zal beelden image eerste om te vergelijken en te laten zien op vergelijkbaarheid%

antwoordde op 31/12/2019 om 06:39
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more