Farklı uzunlukta iki dizinin Öklid mesafe Bul

oy
0

Ben dizeleri benzerliğini kontrol etmek Öklit mesafesi bulmak istiyorum.

Veritabanı

Bir resim nesnesi alanında yukarıdaki resimde itibaren veritabanında birçok resim türleri vardır. Görüntüler bu kullanarak görüntülüyor paining_objectalan. Şimdi ben dizeleri karşılaştırarak bir seçili görüntünün alakalı resim göstermek istiyorum paining_objectalanında. Yani ben dizeleri benzerlikleri bulmak için Öklit mesafesi yöntemini kullandık.

Ama uzunluğunda sorunla karşı karşıya ediyorum. İçin eski. Veritabanından ilk satırda dört resim türleri vardır paining_objectalan ve ikinci sırada dörtten fazla resim türleri vardır. Bu yüzden, nasıl eşit olmayan bir uzunluğa sahip diziler için bu yöntemle mesafeyi ölçmek olabilir.

Oluştur 24/10/2019 saat 11:57
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Biz benzerlik skoru olarak toplam kombinasyon sayısına dize eşleşme sayısı oranını kullanabilirsiniz.

// 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));
}
Cevap 24/10/2019 saat 15:19
kaynak kullanıcı

oy
0

sigara Öklid mesafeleri

İki sırasız diziler arasındaki mesafe setleri arasındaki mesafe olarak rephrased edilebilir.

Hızlı bir arama gösterileri gibi setler arasındaki benzerliği gösteren çeşitli mesafeleri vardır

  • Jaccard mesafesi

    D (a, b) = | arası bir B | / | Sendika b |

  • maksimum fark metrik

    D (a, b) = 1 - | a arası b | / Max (| a |, b |)

Kağıt üzerinde (örneğin) daha mesafeler vardır set comminality üzerindeki setler arasındaki Mesafeler

Hala Öklides mesafe

Hâlâ zorlayabilirsiniz:

Bir kelime gibi tüm manga alın V, boyut demek n. Set düşünün R^n.

Masanızdaki bir satır bir vektör olarak temsil edilebilir vait R^n: satır kelime içeriyorsa i, put v[i] = 1, v[i]=0aksi

Son olarak Öklid mesafe trivially aynı uzunlukta vektörler üzerine uygulanabilir.

gibi bu şekilde uzak

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)

Her kare eşittir 1IFF v_b[i]!=v_a[i]sen elemanları saymak istediğim adeğil bU b not in aböylece mesafe yazabiliriz idem bir simetrik fark ve Size b:

d(a,b) = sqrt(|a \ b|)
Cevap 25/10/2019 saat 11:58
kaynak kullanıcı

oy
1

Ben aşağıdaki gibi Jaccard mesafeyi kullanarak bunu var. Öncelikle hepimizin nesne birlikte ayrılmış olarak geliyor kimliği ve ikinci nesneyi toplayabilir yerden benzersiz nesne için iki tablo oluşturdu (,)

1) image_sub_main Tablo

Burada görüntü açıklama girin

2) image_main Tablo

Burada görüntü açıklama girin

Wordpress Way olarak 3) PHP dosyası

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'/>";
}

Çıktınız benzerlik% göre ilki görüntüye görüntüleri karşılaştırarak gösterecektir

Cevap 31/12/2019 saat 06:39
kaynak kullanıcı

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