Bir dizi seyrek vektörleri saklayan bir tablom var. Seyrek vektör, veri yapısında açıkça sadece sıfır olmayan değerleri sakladığı anlamına gelir. 1 milyon boyutlu bir vektöre sahip olabilirdim, ama sadece sıfır olmayan boyutlar için değerleri saklıyorum. Dolayısıyla, boyut sıfır olmayan girdilerin sayısıyla orantılıdır, vektörün boyutsallığı değil. boyut int: değerini int: vector_id:Seyrek nokta çarpımı SQL
Tablo tanım böyle bir şey olurdu (Şimdi
yüzer, normal programlama topraklarda ben O iç ürünü veya iki vektörlerin nokta ürününü hesaplayabilir | v1 | + | v2 |) saati. Temel olarak, algoritma boyutlara göre sınıflandırılmış seyrek vektörleri saklamak ve boyutlar arasında çarpışmalar bulana kadar her bir boyutta yinelemek ve paylaşılan boyutun değerlerini çoğaltmak ve vektörlerden birinin sonuna gelene kadar bunları eklemeye devam etmektir. .
Bunu SQL'de yapmanın en hızlı yolu nedir? Tek bir sorguda bu algoritmayı çoğaltmak mümkün olmalıdır
Peki indeks tablosu ki? Ile (vector_id, boyut)? –
(Vector_id, boyut) ile dizin oluşturma, en mantıklıdır çünkü bunlar tabloda benzersiz bir kayıt tanımlamalıdır. – dpmattingly
Bu, temel olarak, daha önce bir şeyi daha hızlı yayınlayana kadar size verdiğim şey. Teşekkürler! –