PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज:एक-से-अनेक खोज के लिए फ़्लोट सरणियों की कोसाइन समानता पर अनुक्रमणिका

मुझे लगता है कि ऐसा कोई एक्सटेंशन नहीं है जो ऐसा करता है, इसलिए मुझे एक सीमित समाधान मिला है:

अगर ए और बी दोनों सामान्यीकृत हैं (लंबाई 1), cos(A, B) = 1 - 0.5 * ||A - B||^2 . ||A - B|| यूक्लिडियन दूरी है, और cos(A, B) कोसाइन समानता है। इतनी अधिक यूक्लिडियन दूरी <=> कम कोसाइन समानता (यदि आप एक इकाई सर्कल की कल्पना करते हैं तो सहज रूप से समझ में आता है), और यदि आपके पास गैर-सामान्य वैक्टर हैं, तो उनकी दिशाओं को बदले बिना उनके परिमाण को बदलने से उनकी कोसाइन समानताएं प्रभावित नहीं होती हैं। बढ़िया, इसलिए मैं अपने वैक्टर को सामान्य कर सकता हूं और उनकी यूक्लिडियन दूरियों की तुलना कर सकता हूं...

वहां है यहाँ एक अच्छा जवाब है के बारे में Cube , जो यूक्लिडियन . पर n-आयामी बिंदुओं और GiST अनुक्रमणिका का समर्थन करता है दूरी, लेकिन यह केवल 100 या उससे कम आयामों का समर्थन करता है (उच्च हैक किया जा सकता है, लेकिन मेरे पास लगभग 135 और उच्चतर मुद्दे थे, इसलिए अब मुझे डर है)। पोस्टग्रेज 9.6 या बाद के संस्करण की भी आवश्यकता है।

तो:

  1. सुनिश्चित करें कि मुझे अधिक से अधिक 100 आयामों की परवाह नहीं है। पोस्टग्रेज 9.6 या बाद के संस्करण में अपग्रेड करें।
  2. वैक्टर को दर्शाने के लिए मेरी तालिका को सरणियों से भरें।
  3. वेक्टर को cube . का एक अतिरिक्त कॉलम बनाने के लिए सामान्य करें अंक। इस कॉलम पर एक जिस्ट इंडेक्स बनाएं।
  4. कोसाइन समानता अवरोही प्राप्त करने के लिए आरोही यूक्लिडियन दूरी द्वारा आदेश:EXPLAIN SELECT * FROM mytable ORDER BY normalized <-> cube(array[1,2,3,4,5,6,7,8,9,0]) LIMIT 10;

यदि मुझे 100 से अधिक आयामों की आवश्यकता है, तो मैं एकाधिक अनुक्रमित स्तंभों का उपयोग करके इसे प्राप्त करने में सक्षम हो सकता हूं। उस मामले में जवाब अपडेट करेंगे।

अपडेट करें: बहुत यकीन है कि> 100-आयाम वेक्टर को कई कॉलम में विभाजित करने के साथ मैं कुछ भी नहीं कर सकता। अंत में मुझे पूरी तालिका को स्कैन करना होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres . में एन्क्रिप्टेड फ़ील्ड खोजना

  2. AWS RDS समस्या को कैसे हल करें:psycopg2.OperationalError:FATAL:उपयोगकर्ता रूट के लिए पासवर्ड प्रमाणीकरण विफल

  3. knex के साथ अपरिभाषित डीबी कनेक्शन

  4. पोस्टग्रेएसक्यूएल दिनांक सी# दिनांक समय

  5. Redshift में पंक्तियों को विभाजित करना