| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
| <title>MADlib: svec.sql_in Source File</title> |
| |
| <link href="tabs.css" rel="stylesheet" type="text/css"/> |
| <link href="doxygen.css" rel="stylesheet" type="text/css" /> |
| <link href="navtree.css" rel="stylesheet" type="text/css"/> |
| <script type="text/javascript" src="jquery.js"></script> |
| <script type="text/javascript" src="resize.js"></script> |
| <script type="text/javascript" src="navtree.js"></script> |
| <script type="text/javascript"> |
| $(document).ready(initResizable); |
| </script> |
| <link href="search/search.css" rel="stylesheet" type="text/css"/> |
| <script type="text/javascript" src="search/search.js"></script> |
| <script type="text/javascript"> |
| $(document).ready(function() { searchBox.OnSelectItem(0); }); |
| </script> |
| <script src="../mathjax/MathJax.js"> |
| MathJax.Hub.Config({ |
| extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"], |
| jax: ["input/TeX","output/HTML-CSS"], |
| }); |
| </script> |
| </head> |
| <body> |
| <div id="top"><!-- do not remove this div! --> |
| |
| |
| <div id="titlearea"> |
| <table cellspacing="0" cellpadding="0"> |
| <tbody> |
| <tr style="height: 56px;"> |
| |
| |
| <td style="padding-left: 0.5em;"> |
| <div id="projectname">MADlib |
|  <span id="projectnumber">0.6</span> <span style="font-size:10pt; font-style:italic"><a href="../latest/./svec_8sql__in_source.html"> A newer version is available</a></span> |
| </div> |
| <div id="projectbrief">User Documentation</div> |
| </td> |
| |
| |
| |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| |
| <!-- Generated by Doxygen 1.7.5.1 --> |
| <script type="text/javascript"> |
| var searchBox = new SearchBox("searchBox", "search",false,'Search'); |
| </script> |
| <script type="text/javascript" src="dynsections.js"></script> |
| <div id="navrow1" class="tabs"> |
| <ul class="tablist"> |
| <li><a href="index.html"><span>Main Page</span></a></li> |
| <li><a href="modules.html"><span>Modules</span></a></li> |
| <li class="current"><a href="files.html"><span>Files</span></a></li> |
| <li> |
| <div id="MSearchBox" class="MSearchBoxInactive"> |
| <span class="left"> |
| <img id="MSearchSelect" src="search/mag_sel.png" |
| onmouseover="return searchBox.OnSearchSelectShow()" |
| onmouseout="return searchBox.OnSearchSelectHide()" |
| alt=""/> |
| <input type="text" id="MSearchField" value="Search" accesskey="S" |
| onfocus="searchBox.OnSearchFieldFocus(true)" |
| onblur="searchBox.OnSearchFieldFocus(false)" |
| onkeyup="searchBox.OnSearchFieldChange(event)"/> |
| </span><span class="right"> |
| <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> |
| </span> |
| </div> |
| </li> |
| </ul> |
| </div> |
| <div id="navrow2" class="tabs2"> |
| <ul class="tablist"> |
| <li><a href="files.html"><span>File List</span></a></li> |
| <li><a href="globals.html"><span>File Members</span></a></li> |
| </ul> |
| </div> |
| </div> |
| <div id="side-nav" class="ui-resizable side-nav-resizable"> |
| <div id="nav-tree"> |
| <div id="nav-tree-contents"> |
| </div> |
| </div> |
| <div id="splitbar" style="-moz-user-select:none;" |
| class="ui-resizable-handle"> |
| </div> |
| </div> |
| <script type="text/javascript"> |
| initNavTree('svec_8sql__in.html',''); |
| </script> |
| <div id="doc-content"> |
| <div class="header"> |
| <div class="headertitle"> |
| <div class="title">svec.sql_in</div> </div> |
| </div> |
| <div class="contents"> |
| <a href="svec_8sql__in.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* ----------------------------------------------------------------------- */</span><span class="comment">/** </span> |
| <a name="l00002"></a>00002 <span class="comment"> *</span> |
| <a name="l00003"></a>00003 <span class="comment"> * @file svec.sql_in</span> |
| <a name="l00004"></a>00004 <span class="comment"> *</span> |
| <a name="l00005"></a>00005 <span class="comment"> * @brief SQL type definitions and functions for sparse vector data type</span> |
| <a name="l00006"></a>00006 <span class="comment"> * <tt>svec</tt></span> |
| <a name="l00007"></a>00007 <span class="comment"> *</span> |
| <a name="l00008"></a>00008 <span class="comment"> * @sa For an introduction to the sparse vector implementation, see the module</span> |
| <a name="l00009"></a>00009 <span class="comment"> * description \ref grp_svec.</span> |
| <a name="l00010"></a>00010 <span class="comment"> *</span> |
| <a name="l00011"></a>00011 <span class="comment"> */</span><span class="comment">/* ----------------------------------------------------------------------- */</span> |
| <a name="l00012"></a>00012 |
| <a name="l00013"></a>00013 m4_include(`SQLCommon.m4<span class="stringliteral">')</span> |
| <a name="l00014"></a>00014 <span class="stringliteral"></span><span class="comment"></span> |
| <a name="l00015"></a>00015 <span class="comment">/**</span> |
| <a name="l00016"></a>00016 <span class="comment">@addtogroup grp_svec</span> |
| <a name="l00017"></a>00017 <span class="comment"></span> |
| <a name="l00018"></a>00018 <span class="comment">@about</span> |
| <a name="l00019"></a>00019 <span class="comment"></span> |
| <a name="l00020"></a>00020 <span class="comment">This module implements a sparse vector data type named "svec", which </span> |
| <a name="l00021"></a>00021 <span class="comment">gives compressed storage of sparse vectors with many duplicate elements.</span> |
| <a name="l00022"></a>00022 <span class="comment"></span> |
| <a name="l00023"></a>00023 <span class="comment">When we use arrays of floating point numbers for various calculations, </span> |
| <a name="l00024"></a>00024 <span class="comment"> we will sometimes have long runs of zeros (or some other default value). </span> |
| <a name="l00025"></a>00025 <span class="comment"> This is common in applications like scientific computing, </span> |
| <a name="l00026"></a>00026 <span class="comment"> retail optimization, and text processing. Each floating point number takes </span> |
| <a name="l00027"></a>00027 <span class="comment"> 8 bytes of storage in memory and/or disk, so saving those zeros is often </span> |
| <a name="l00028"></a>00028 <span class="comment"> worthwhile. There are also many computations that can benefit from skipping</span> |
| <a name="l00029"></a>00029 <span class="comment"> over the zeros.</span> |
| <a name="l00030"></a>00030 <span class="comment"></span> |
| <a name="l00031"></a>00031 <span class="comment"> To focus the discussion, consider, for example, the following </span> |
| <a name="l00032"></a>00032 <span class="comment"> array of doubles stored as a Postgres/GP "float8[]" data type:</span> |
| <a name="l00033"></a>00033 <span class="comment"></span> |
| <a name="l00034"></a>00034 <span class="comment">\code</span> |
| <a name="l00035"></a>00035 <span class="comment">'{0, 33,...40,000 zeros..., 12, 22 }'::float8[].</span> |
| <a name="l00036"></a>00036 <span class="comment">\endcode</span> |
| <a name="l00037"></a>00037 <span class="comment"></span> |
| <a name="l00038"></a>00038 <span class="comment"> This array would occupy slightly more than 320KB of memory/disk, most of </span> |
| <a name="l00039"></a>00039 <span class="comment"> it zeros. Even if we were to exploit the null bitmap and store the zeros </span> |
| <a name="l00040"></a>00040 <span class="comment"> as nulls, we would still end up with a 5KB null bitmap, which is still </span> |
| <a name="l00041"></a>00041 <span class="comment"> not nearly as memory efficient as we'd like. Also, as we perform various </span> |
| <a name="l00042"></a>00042 <span class="comment"> operations on the array, we'll often be doing work on 40,000 fields that </span> |
| <a name="l00043"></a>00043 <span class="comment"> would turn out not to be important. </span> |
| <a name="l00044"></a>00044 <span class="comment"></span> |
| <a name="l00045"></a>00045 <span class="comment"> To solve the problems associated with the processing of sparse vectors </span> |
| <a name="l00046"></a>00046 <span class="comment"> discussed above, we adopt a simple Run Length Encoding (RLE) scheme to </span> |
| <a name="l00047"></a>00047 <span class="comment"> represent sparse vectors as pairs of count-value arrays. So, for example, </span> |
| <a name="l00048"></a>00048 <span class="comment"> the array above would be represented as follows</span> |
| <a name="l00049"></a>00049 <span class="comment"></span> |
| <a name="l00050"></a>00050 <span class="comment">\code</span> |
| <a name="l00051"></a>00051 <span class="comment">'{1,1,40000,1,1}:{0,33,0,12,22}'::MADLIB_SCHEMA.svec,</span> |
| <a name="l00052"></a>00052 <span class="comment">\endcode</span> |
| <a name="l00053"></a>00053 <span class="comment"></span> |
| <a name="l00054"></a>00054 <span class="comment"> which says there is 1 occurrence of 0, followed by 1 occurrence of 33, </span> |
| <a name="l00055"></a>00055 <span class="comment"> followed by 40,000 occurrences of 0, etc. In contrast to the naive </span> |
| <a name="l00056"></a>00056 <span class="comment"> representations, we only need 5 integers and 5 floating point numbers</span> |
| <a name="l00057"></a>00057 <span class="comment"> to store the array. Further, it is easy to implement vector operations </span> |
| <a name="l00058"></a>00058 <span class="comment"> that can take advantage of the RLE representation to make computations </span> |
| <a name="l00059"></a>00059 <span class="comment"> faster. The module provides a library of such functions.</span> |
| <a name="l00060"></a>00060 <span class="comment"></span> |
| <a name="l00061"></a>00061 <span class="comment"> The current version only supports sparse vectors of float8</span> |
| <a name="l00062"></a>00062 <span class="comment"> values. Future versions will support other base types.</span> |
| <a name="l00063"></a>00063 <span class="comment"></span> |
| <a name="l00064"></a>00064 <span class="comment">@usage</span> |
| <a name="l00065"></a>00065 <span class="comment"></span> |
| <a name="l00066"></a>00066 <span class="comment"> SVEC's can be constructed directly as follows:</span> |
| <a name="l00067"></a>00067 <span class="comment"> <pre></span> |
| <a name="l00068"></a>00068 <span class="comment"> SELECT '{n1,n2,...,nk}:{v1,v2,...vk}'::MADLIB_SCHEMA.svec;</span> |
| <a name="l00069"></a>00069 <span class="comment"> </pre></span> |
| <a name="l00070"></a>00070 <span class="comment"> WHERE <tt>n1,n2,...,nk</tt> specifies the counts for the values <tt>v1,v2,...,vk</tt>.</span> |
| <a name="l00071"></a>00071 <span class="comment"> </span> |
| <a name="l00072"></a>00072 <span class="comment"> Or, SVEC's can also be casted from a float array:</span> |
| <a name="l00073"></a>00073 <span class="comment"> <pre></span> |
| <a name="l00074"></a>00074 <span class="comment"> SELECT ('{v1,v2,...vk}'::float[])::MADLIB_SCHEMA.svec;</span> |
| <a name="l00075"></a>00075 <span class="comment"> </pre> </span> |
| <a name="l00076"></a>00076 <span class="comment"></span> |
| <a name="l00077"></a>00077 <span class="comment"> Syntax reference can be found in svec.sql_in.</span> |
| <a name="l00078"></a>00078 <span class="comment"></span> |
| <a name="l00079"></a>00079 <span class="comment"> Users need to add MADLIB_SCHEMA to their search_path to use the svec operators</span> |
| <a name="l00080"></a>00080 <span class="comment"> defined in the module.</span> |
| <a name="l00081"></a>00081 <span class="comment"></span> |
| <a name="l00082"></a>00082 <span class="comment">@examp</span> |
| <a name="l00083"></a>00083 <span class="comment"></span> |
| <a name="l00084"></a>00084 <span class="comment"> We can use operations with svec type like <, >, *, **, /, =, +, SUM, etc, </span> |
| <a name="l00085"></a>00085 <span class="comment"> and they have meanings associated with typical vector operations. For </span> |
| <a name="l00086"></a>00086 <span class="comment"> example, the plus (+) operator adds each of the terms of two vectors having</span> |
| <a name="l00087"></a>00087 <span class="comment"> the same dimension together. </span> |
| <a name="l00088"></a>00088 <span class="comment">\code</span> |
| <a name="l00089"></a>00089 <span class="comment">sql> SELECT ('{0,1,5}'::float8[]::MADLIB_SCHEMA.svec + '{4,3,2}'::float8[]::MADLIB_SCHEMA.svec)::float8[];</span> |
| <a name="l00090"></a>00090 <span class="comment"> float8 </span> |
| <a name="l00091"></a>00091 <span class="comment">---------</span> |
| <a name="l00092"></a>00092 <span class="comment"> {4,4,7}</span> |
| <a name="l00093"></a>00093 <span class="comment">\endcode</span> |
| <a name="l00094"></a>00094 <span class="comment"></span> |
| <a name="l00095"></a>00095 <span class="comment"> Without the casting into float8[] at the end, we get:</span> |
| <a name="l00096"></a>00096 <span class="comment">\code</span> |
| <a name="l00097"></a>00097 <span class="comment">sql> SELECT '{0,1,5}'::float8[]::MADLIB_SCHEMA.svec + '{4,3,2}'::float8[]::MADLIB_SCHEMA.svec;</span> |
| <a name="l00098"></a>00098 <span class="comment"> ?column? </span> |
| <a name="l00099"></a>00099 <span class="comment">----------</span> |
| <a name="l00100"></a>00100 <span class="comment">{2,1}:{4,7} </span> |
| <a name="l00101"></a>00101 <span class="comment">\endcode</span> |
| <a name="l00102"></a>00102 <span class="comment"></span> |
| <a name="l00103"></a>00103 <span class="comment"> A dot product (%*%) between the two vectors will result in a scalar </span> |
| <a name="l00104"></a>00104 <span class="comment"> result of type float8. The dot product should be (0*4 + 1*3 + 5*2) = 13, </span> |
| <a name="l00105"></a>00105 <span class="comment"> like this:</span> |
| <a name="l00106"></a>00106 <span class="comment">\code</span> |
| <a name="l00107"></a>00107 <span class="comment">sql> SELECT '{0,1,5}'::float8[]::MADLIB_SCHEMA.svec %*% '{4,3,2}'::float8[]::MADLIB_SCHEMA.svec;</span> |
| <a name="l00108"></a>00108 <span class="comment"> ?column? </span> |
| <a name="l00109"></a>00109 <span class="comment">----------</span> |
| <a name="l00110"></a>00110 <span class="comment"> 13</span> |
| <a name="l00111"></a>00111 <span class="comment">\endcode</span> |
| <a name="l00112"></a>00112 <span class="comment"></span> |
| <a name="l00113"></a>00113 <span class="comment"> Special vector aggregate functions are also available. SUM is self </span> |
| <a name="l00114"></a>00114 <span class="comment"> explanatory. SVEC_COUNT_NONZERO evaluates the count of non-zero terms </span> |
| <a name="l00115"></a>00115 <span class="comment"> in each column found in a set of n-dimensional svecs and returns an </span> |
| <a name="l00116"></a>00116 <span class="comment"> svec with the counts. For instance, if we have the vectors {0,1,5},</span> |
| <a name="l00117"></a>00117 <span class="comment"> {10,0,3},{0,0,3},{0,1,0}, then executing the SVEC_COUNT_NONZERO() aggregate</span> |
| <a name="l00118"></a>00118 <span class="comment"> function would result in {1,2,3}:</span> |
| <a name="l00119"></a>00119 <span class="comment"></span> |
| <a name="l00120"></a>00120 <span class="comment">\code</span> |
| <a name="l00121"></a>00121 <span class="comment">sql> create table list (a MADLIB_SCHEMA.svec);</span> |
| <a name="l00122"></a>00122 <span class="comment">sql> insert into list values ('{0,1,5}'::float8[]), ('{10,0,3}'::float8[]), ('{0,0,3}'::float8[]),('{0,1,0}'::float8[]);</span> |
| <a name="l00123"></a>00123 <span class="comment"></span> |
| <a name="l00124"></a>00124 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_count_nonzero(a)::float8[] FROM list;</span> |
| <a name="l00125"></a>00125 <span class="comment">svec_count_nonzero </span> |
| <a name="l00126"></a>00126 <span class="comment">-----------------</span> |
| <a name="l00127"></a>00127 <span class="comment"> {1,2,3}</span> |
| <a name="l00128"></a>00128 <span class="comment">\endcode</span> |
| <a name="l00129"></a>00129 <span class="comment"></span> |
| <a name="l00130"></a>00130 <span class="comment"> We do not use null bitmaps in the svec data type. A null value in an svec </span> |
| <a name="l00131"></a>00131 <span class="comment"> is represented explicitly as an NVP (No Value Present) value. For example, </span> |
| <a name="l00132"></a>00132 <span class="comment"> we have:</span> |
| <a name="l00133"></a>00133 <span class="comment">\code</span> |
| <a name="l00134"></a>00134 <span class="comment">sql> SELECT '{1,2,3}:{4,null,5}'::MADLIB_SCHEMA.svec;</span> |
| <a name="l00135"></a>00135 <span class="comment"> svec </span> |
| <a name="l00136"></a>00136 <span class="comment">-------------------</span> |
| <a name="l00137"></a>00137 <span class="comment"> {1,2,3}:{4,NVP,5}</span> |
| <a name="l00138"></a>00138 <span class="comment"></span> |
| <a name="l00139"></a>00139 <span class="comment">sql> SELECT '{1,2,3}:{4,null,5}'::MADLIB_SCHEMA.svec + '{2,2,2}:{8,9,10}'::MADLIB_SCHEMA.svec; </span> |
| <a name="l00140"></a>00140 <span class="comment"> ?column? </span> |
| <a name="l00141"></a>00141 <span class="comment"> --------------------------</span> |
| <a name="l00142"></a>00142 <span class="comment"> {1,2,1,2}:{12,NVP,14,15}</span> |
| <a name="l00143"></a>00143 <span class="comment">\endcode</span> |
| <a name="l00144"></a>00144 <span class="comment"></span> |
| <a name="l00145"></a>00145 <span class="comment"> An element of an svec can be accessed using the svec_proj() function,</span> |
| <a name="l00146"></a>00146 <span class="comment"> which takes an svec and the index of the element desired.</span> |
| <a name="l00147"></a>00147 <span class="comment">\code</span> |
| <a name="l00148"></a>00148 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_proj('{1,2,3}:{4,5,6}'::MADLIB_SCHEMA.svec, 1) + MADLIB_SCHEMA.svec_proj('{4,5,6}:{1,2,3}'::MADLIB_SCHEMA.svec, 15); </span> |
| <a name="l00149"></a>00149 <span class="comment"> ?column? </span> |
| <a name="l00150"></a>00150 <span class="comment">----------</span> |
| <a name="l00151"></a>00151 <span class="comment"> 7</span> |
| <a name="l00152"></a>00152 <span class="comment">\endcode</span> |
| <a name="l00153"></a>00153 <span class="comment"></span> |
| <a name="l00154"></a>00154 <span class="comment"> A subvector of an svec can be accessed using the svec_subvec() function,</span> |
| <a name="l00155"></a>00155 <span class="comment"> which takes an svec and the start and end index of the subvector desired.</span> |
| <a name="l00156"></a>00156 <span class="comment">\code</span> |
| <a name="l00157"></a>00157 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_subvec('{2,4,6}:{1,3,5}'::MADLIB_SCHEMA.svec, 2, 11);</span> |
| <a name="l00158"></a>00158 <span class="comment"> svec_subvec </span> |
| <a name="l00159"></a>00159 <span class="comment">----------------- </span> |
| <a name="l00160"></a>00160 <span class="comment"> {1,4,5}:{1,3,5}</span> |
| <a name="l00161"></a>00161 <span class="comment">\endcode</span> |
| <a name="l00162"></a>00162 <span class="comment"></span> |
| <a name="l00163"></a>00163 <span class="comment"> The elements/subvector of an svec can be changed using the function </span> |
| <a name="l00164"></a>00164 <span class="comment"> svec_change(). It takes three arguments: an m-dimensional svec sv1, a</span> |
| <a name="l00165"></a>00165 <span class="comment"> start index j, and an n-dimensional svec sv2 such that j + n - 1 <= m,</span> |
| <a name="l00166"></a>00166 <span class="comment"> and returns an svec like sv1 but with the subvector sv1[j:j+n-1] </span> |
| <a name="l00167"></a>00167 <span class="comment"> replaced by sv2. An example follows:</span> |
| <a name="l00168"></a>00168 <span class="comment">\code</span> |
| <a name="l00169"></a>00169 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_change('{1,2,3}:{4,5,6}'::MADLIB_SCHEMA.svec,3,'{2}:{3}'::MADLIB_SCHEMA.svec);</span> |
| <a name="l00170"></a>00170 <span class="comment"> svec_change </span> |
| <a name="l00171"></a>00171 <span class="comment">---------------------</span> |
| <a name="l00172"></a>00172 <span class="comment"> {1,1,2,2}:{4,5,3,6}</span> |
| <a name="l00173"></a>00173 <span class="comment">\endcode</span> |
| <a name="l00174"></a>00174 <span class="comment"></span> |
| <a name="l00175"></a>00175 <span class="comment"> There are also higher-order functions for processing svecs. For example,</span> |
| <a name="l00176"></a>00176 <span class="comment"> the following is the corresponding function for lapply() in R.</span> |
| <a name="l00177"></a>00177 <span class="comment">\code</span> |
| <a name="l00178"></a>00178 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_lapply('sqrt', '{1,2,3}:{4,5,6}'::MADLIB_SCHEMA.svec);</span> |
| <a name="l00179"></a>00179 <span class="comment"> svec_lapply </span> |
| <a name="l00180"></a>00180 <span class="comment">-----------------------------------------------</span> |
| <a name="l00181"></a>00181 <span class="comment"> {1,2,3}:{2,2.23606797749979,2.44948974278318}</span> |
| <a name="l00182"></a>00182 <span class="comment">\endcode</span> |
| <a name="l00183"></a>00183 <span class="comment"></span> |
| <a name="l00184"></a>00184 <span class="comment"> The full list of functions available for operating on svecs are available</span> |
| <a name="l00185"></a>00185 <span class="comment"> in svec.sql.</span> |
| <a name="l00186"></a>00186 <span class="comment"></span> |
| <a name="l00187"></a>00187 <span class="comment"><b> A More Extensive Example</b></span> |
| <a name="l00188"></a>00188 <span class="comment"></span> |
| <a name="l00189"></a>00189 <span class="comment"> For a text classification example, let's assume we have a dictionary </span> |
| <a name="l00190"></a>00190 <span class="comment"> composed of words in a sorted text array:</span> |
| <a name="l00191"></a>00191 <span class="comment">\code</span> |
| <a name="l00192"></a>00192 <span class="comment">sql> create table features (a text[]);</span> |
| <a name="l00193"></a>00193 <span class="comment">sql> insert into features values </span> |
| <a name="l00194"></a>00194 <span class="comment"> ('{am,before,being,bothered,corpus,document,i,in,is,me,</span> |
| <a name="l00195"></a>00195 <span class="comment"> never,now,one,really,second,the,third,this,until}');</span> |
| <a name="l00196"></a>00196 <span class="comment">\endcode</span> |
| <a name="l00197"></a>00197 <span class="comment"> We have a set of documents, each represented as an array of words:</span> |
| <a name="l00198"></a>00198 <span class="comment">\code</span> |
| <a name="l00199"></a>00199 <span class="comment">sql> create table documents(a int,b text[]);</span> |
| <a name="l00200"></a>00200 <span class="comment">sql> insert into documents values</span> |
| <a name="l00201"></a>00201 <span class="comment"> (1,'{this,is,one,document,in,the,corpus}'),</span> |
| <a name="l00202"></a>00202 <span class="comment"> (2,'{i,am,the,second,document,in,the,corpus}'),</span> |
| <a name="l00203"></a>00203 <span class="comment"> (3,'{being,third,never,really,bothered,me,until,now}'),</span> |
| <a name="l00204"></a>00204 <span class="comment"> (4,'{the,document,before,me,is,the,third,document}');</span> |
| <a name="l00205"></a>00205 <span class="comment">\endcode</span> |
| <a name="l00206"></a>00206 <span class="comment"></span> |
| <a name="l00207"></a>00207 <span class="comment"> Now we have a dictionary and some documents, we would like to do some </span> |
| <a name="l00208"></a>00208 <span class="comment"> document categorization using vector arithmetic on word counts and </span> |
| <a name="l00209"></a>00209 <span class="comment"> proportions of dictionary words in each document.</span> |
| <a name="l00210"></a>00210 <span class="comment"></span> |
| <a name="l00211"></a>00211 <span class="comment"> To start this process, we'll need to find the dictionary words in each </span> |
| <a name="l00212"></a>00212 <span class="comment"> document. We'll prepare what is called a Sparse Feature Vector or SFV </span> |
| <a name="l00213"></a>00213 <span class="comment"> for each document. An SFV is a vector of dimension N, where N is the </span> |
| <a name="l00214"></a>00214 <span class="comment"> number of dictionary words, and in each cell of an SFV is a count of </span> |
| <a name="l00215"></a>00215 <span class="comment"> each dictionary word in the document.</span> |
| <a name="l00216"></a>00216 <span class="comment"></span> |
| <a name="l00217"></a>00217 <span class="comment"> Inside the sparse vector library, we have a function that will create </span> |
| <a name="l00218"></a>00218 <span class="comment"> an SFV from a document, so we can just do this:</span> |
| <a name="l00219"></a>00219 <span class="comment">\code</span> |
| <a name="l00220"></a>00220 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_sfv((SELECT a FROM features LIMIT 1),b)::float8[] </span> |
| <a name="l00221"></a>00221 <span class="comment"> FROM documents;</span> |
| <a name="l00222"></a>00222 <span class="comment"></span> |
| <a name="l00223"></a>00223 <span class="comment"> svec_sfv</span> |
| <a name="l00224"></a>00224 <span class="comment">-----------------------------------------</span> |
| <a name="l00225"></a>00225 <span class="comment"> {0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1,0}</span> |
| <a name="l00226"></a>00226 <span class="comment"> {0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1}</span> |
| <a name="l00227"></a>00227 <span class="comment"> {1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,2,0,0,0}</span> |
| <a name="l00228"></a>00228 <span class="comment"> {0,1,0,0,0,2,0,0,1,1,0,0,0,0,0,2,1,0,0}</span> |
| <a name="l00229"></a>00229 <span class="comment">\endcode</span> |
| <a name="l00230"></a>00230 <span class="comment"> Note that the output of MADLIB_SCHEMA.svec_sfv() is an svec for each </span> |
| <a name="l00231"></a>00231 <span class="comment"> document containing the count of each of the dictionary words in the </span> |
| <a name="l00232"></a>00232 <span class="comment"> ordinal positions of the dictionary. This can more easily be understood </span> |
| <a name="l00233"></a>00233 <span class="comment"> by lining up the feature vector and text like this:</span> |
| <a name="l00234"></a>00234 <span class="comment">\code</span> |
| <a name="l00235"></a>00235 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_sfv((SELECT a FROM features LIMIT 1),b)::float8[]</span> |
| <a name="l00236"></a>00236 <span class="comment"> , b </span> |
| <a name="l00237"></a>00237 <span class="comment"> FROM documents;</span> |
| <a name="l00238"></a>00238 <span class="comment"></span> |
| <a name="l00239"></a>00239 <span class="comment"> svec_sfv | b </span> |
| <a name="l00240"></a>00240 <span class="comment">-----------------------------------------+--------------------------------------------------</span> |
| <a name="l00241"></a>00241 <span class="comment"> {1,0,0,0,1,1,1,1,0,0,0,0,0,0,1,2,0,0,0} | {i,am,the,second,document,in,the,corpus}</span> |
| <a name="l00242"></a>00242 <span class="comment"> {0,1,0,0,0,2,0,0,1,1,0,0,0,0,0,2,1,0,0} | {the,document,before,me,is,the,third,document}</span> |
| <a name="l00243"></a>00243 <span class="comment"> {0,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1,0} | {this,is,one,document,in,the,corpus}</span> |
| <a name="l00244"></a>00244 <span class="comment"> {0,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1} | {being,third,never,really,bothered,me,until,now}</span> |
| <a name="l00245"></a>00245 <span class="comment"></span> |
| <a name="l00246"></a>00246 <span class="comment">sql> SELECT * FROM features;</span> |
| <a name="l00247"></a>00247 <span class="comment"> a </span> |
| <a name="l00248"></a>00248 <span class="comment">--------------------------------------------------------------------------------------------------------</span> |
| <a name="l00249"></a>00249 <span class="comment">{am,before,being,bothered,corpus,document,i,in,is,me,never,now,one,really,second,the,third,this,until}</span> |
| <a name="l00250"></a>00250 <span class="comment">\endcode</span> |
| <a name="l00251"></a>00251 <span class="comment"></span> |
| <a name="l00252"></a>00252 <span class="comment"> Now when we look at the document "i am the second document in the corpus", </span> |
| <a name="l00253"></a>00253 <span class="comment"> its SFV is {1,3*0,1,1,1,1,6*0,1,2}. The word "am" is the first ordinate in </span> |
| <a name="l00254"></a>00254 <span class="comment"> the dictionary and there is 1 instance of it in the SFV. The word "before" </span> |
| <a name="l00255"></a>00255 <span class="comment"> has no instances in the document, so its value is "0" and so on.</span> |
| <a name="l00256"></a>00256 <span class="comment"></span> |
| <a name="l00257"></a>00257 <span class="comment"> The function MADLIB_SCHEMA.svec_sfv() can process large </span> |
| <a name="l00258"></a>00258 <span class="comment"> numbers of documents into their SFVs in parallel at high speed.</span> |
| <a name="l00259"></a>00259 <span class="comment"></span> |
| <a name="l00260"></a>00260 <span class="comment"> The rest of the categorization process is all vector math. The actual </span> |
| <a name="l00261"></a>00261 <span class="comment"> count is hardly ever used. Instead, it's turned into a weight. The most </span> |
| <a name="l00262"></a>00262 <span class="comment"> common weight is called tf/idf for Term Frequency / Inverse Document </span> |
| <a name="l00263"></a>00263 <span class="comment"> Frequency. The calculation for a given term in a given document is </span> |
| <a name="l00264"></a>00264 <span class="comment">\code</span> |
| <a name="l00265"></a>00265 <span class="comment">{#Times in document} * log {#Documents / #Documents the term appears in}.</span> |
| <a name="l00266"></a>00266 <span class="comment">\endcode</span> |
| <a name="l00267"></a>00267 <span class="comment"> For instance, the term "document" in document A would have weight </span> |
| <a name="l00268"></a>00268 <span class="comment"> 1 * log (4/3). In document D, it would have weight 2 * log (4/3).</span> |
| <a name="l00269"></a>00269 <span class="comment"> Terms that appear in every document would have tf/idf weight 0, since </span> |
| <a name="l00270"></a>00270 <span class="comment"> log (4/4) = log(1) = 0. (Our example has no term like that.) That </span> |
| <a name="l00271"></a>00271 <span class="comment"> usually sends a lot of values to 0.</span> |
| <a name="l00272"></a>00272 <span class="comment"></span> |
| <a name="l00273"></a>00273 <span class="comment"> For this part of the processing, we'll need to have a sparse vector of </span> |
| <a name="l00274"></a>00274 <span class="comment"> the dictionary dimension (19) with the values </span> |
| <a name="l00275"></a>00275 <span class="comment">\code</span> |
| <a name="l00276"></a>00276 <span class="comment">log(#documents/#Documents each term appears in). </span> |
| <a name="l00277"></a>00277 <span class="comment">\endcode</span> |
| <a name="l00278"></a>00278 <span class="comment"> There will be one such vector for the whole list of documents (aka the </span> |
| <a name="l00279"></a>00279 <span class="comment"> "corpus"). The #documents is just a count of all of the documents, in </span> |
| <a name="l00280"></a>00280 <span class="comment"> this case 4, but there is one divisor for each dictionary word and its </span> |
| <a name="l00281"></a>00281 <span class="comment"> value is the count of all the times that word appears in the document. </span> |
| <a name="l00282"></a>00282 <span class="comment"> This single vector for the whole corpus can then be scalar product </span> |
| <a name="l00283"></a>00283 <span class="comment"> multiplied by each document SFV to produce the Term Frequency/Inverse </span> |
| <a name="l00284"></a>00284 <span class="comment"> Document Frequency weights.</span> |
| <a name="l00285"></a>00285 <span class="comment"></span> |
| <a name="l00286"></a>00286 <span class="comment"> This can be done as follows:</span> |
| <a name="l00287"></a>00287 <span class="comment">\code</span> |
| <a name="l00288"></a>00288 <span class="comment">sql> create table corpus as </span> |
| <a name="l00289"></a>00289 <span class="comment"> (SELECT a, MADLIB_SCHEMA.svec_sfv((SELECT a FROM features LIMIT 1),b) sfv </span> |
| <a name="l00290"></a>00290 <span class="comment"> FROM documents);</span> |
| <a name="l00291"></a>00291 <span class="comment">sql> create table weights as</span> |
| <a name="l00292"></a>00292 <span class="comment"> (SELECT a docnum, MADLIB_SCHEMA.svec_mult(sfv, logidf) tf_idf </span> |
| <a name="l00293"></a>00293 <span class="comment"> FROM (SELECT MADLIB_SCHEMA.svec_log(MADLIB_SCHEMA.svec_div(count(sfv)::MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec_count_nonzero(sfv))) logidf </span> |
| <a name="l00294"></a>00294 <span class="comment"> FROM corpus) foo, corpus ORDER BYdocnum);</span> |
| <a name="l00295"></a>00295 <span class="comment">sql> SELECT * FROM weights;</span> |
| <a name="l00296"></a>00296 <span class="comment"></span> |
| <a name="l00297"></a>00297 <span class="comment">docnum | tf_idf </span> |
| <a name="l00298"></a>00298 <span class="comment">-------+----------------------------------------------------------------------</span> |
| <a name="l00299"></a>00299 <span class="comment"> 1 | {4,1,1,1,2,3,1,2,1,1,1,1}:{0,0.69,0.28,0,0.69,0,1.38,0,0.28,0,1.38,0}</span> |
| <a name="l00300"></a>00300 <span class="comment"> 2 | {1,3,1,1,1,1,6,1,1,3}:{1.38,0,0.69,0.28,1.38,0.69,0,1.38,0.57,0}</span> |
| <a name="l00301"></a>00301 <span class="comment"> 3 | {2,2,5,1,2,1,1,2,1,1,1}:{0,1.38,0,0.69,1.38,0,1.38,0,0.69,0,1.38}</span> |
| <a name="l00302"></a>00302 <span class="comment"> 4 | {1,1,3,1,2,2,5,1,1,2}:{0,1.38,0,0.57,0,0.69,0,0.57,0.69,0}</span> |
| <a name="l00303"></a>00303 <span class="comment">\endcode</span> |
| <a name="l00304"></a>00304 <span class="comment"></span> |
| <a name="l00305"></a>00305 <span class="comment"> We can now get the "angular distance" between one document and the rest </span> |
| <a name="l00306"></a>00306 <span class="comment"> of the documents using the ACOS of the dot product of the document vectors:</span> |
| <a name="l00307"></a>00307 <span class="comment"> The following calculates the angular distance between the first document </span> |
| <a name="l00308"></a>00308 <span class="comment"> and each of the other documents:</span> |
| <a name="l00309"></a>00309 <span class="comment">\code</span> |
| <a name="l00310"></a>00310 <span class="comment">sql> SELECT docnum,</span> |
| <a name="l00311"></a>00311 <span class="comment"> 180. * ( ACOS( MADLIB_SCHEMA.svec_dmin( 1., MADLIB_SCHEMA.svec_dot(tf_idf, testdoc) </span> |
| <a name="l00312"></a>00312 <span class="comment"> / (MADLIB_SCHEMA.svec_l2norm(tf_idf)*MADLIB_SCHEMA.svec_l2norm(testdoc))))/3.141592654) angular_distance </span> |
| <a name="l00313"></a>00313 <span class="comment"> FROM weights,(SELECT tf_idf testdoc FROM weights WHERE docnum = 1 LIMIT 1) foo </span> |
| <a name="l00314"></a>00314 <span class="comment"> ORDER BY 1;</span> |
| <a name="l00315"></a>00315 <span class="comment"></span> |
| <a name="l00316"></a>00316 <span class="comment">docnum | angular_distance </span> |
| <a name="l00317"></a>00317 <span class="comment">--------+------------------</span> |
| <a name="l00318"></a>00318 <span class="comment"> 1 | 0</span> |
| <a name="l00319"></a>00319 <span class="comment"> 2 | 78.8235846096986</span> |
| <a name="l00320"></a>00320 <span class="comment"> 3 | 89.9999999882484</span> |
| <a name="l00321"></a>00321 <span class="comment"> 4 | 80.0232034288617</span> |
| <a name="l00322"></a>00322 <span class="comment">\endcode</span> |
| <a name="l00323"></a>00323 <span class="comment"> We can see that the angular distance between document 1 and itself </span> |
| <a name="l00324"></a>00324 <span class="comment"> is 0 degrees and between document 1 and 3 is 90 degrees because they </span> |
| <a name="l00325"></a>00325 <span class="comment"> share no features at all. The angular distance can now be plugged into</span> |
| <a name="l00326"></a>00326 <span class="comment"> machine learning algorithms that rely on a distance measure between</span> |
| <a name="l00327"></a>00327 <span class="comment"> data points.</span> |
| <a name="l00328"></a>00328 <span class="comment"> </span> |
| <a name="l00329"></a>00329 <span class="comment"> SVEC also provides functionality for declaring array given and array of positions and array of values, intermediate values betweens those</span> |
| <a name="l00330"></a>00330 <span class="comment"> are declared to be base value that user provides in the same function call. In the example below the fist array of integers represents the</span> |
| <a name="l00331"></a>00331 <span class="comment"> positions for the array two (array of floats). Positions do not need to come in the sorted order. </span> |
| <a name="l00332"></a>00332 <span class="comment"> Third value represents desired maximum size of the array. This assures that array is of that size</span> |
| <a name="l00333"></a>00333 <span class="comment"> even if last position is not. If max size < 1 that value is ignored and array will end at the last position in the position vector. Final value is a float representing the base value to be used between the declared ones (0 would be a common candidate):</span> |
| <a name="l00334"></a>00334 <span class="comment">\code</span> |
| <a name="l00335"></a>00335 <span class="comment">sql> SELECT MADLIB_SCHEMA.svec_cast_positions_float8arr(ARRAY[1,2,7,5,87],ARRAY[.1,.2,.7,.5,.87],90,0.0);</span> |
| <a name="l00336"></a>00336 <span class="comment"></span> |
| <a name="l00337"></a>00337 <span class="comment"> svec_cast_positions_float8arr </span> |
| <a name="l00338"></a>00338 <span class="comment">-----------------------------------------------------</span> |
| <a name="l00339"></a>00339 <span class="comment">{1,1,2,1,1,1,79,1,3}:{0.1,0.2,0,0.5,0,0.7,0,0.87,0}</span> |
| <a name="l00340"></a>00340 <span class="comment">(1 row)</span> |
| <a name="l00341"></a>00341 <span class="comment">\endcode</span> |
| <a name="l00342"></a>00342 <span class="comment"></span> |
| <a name="l00343"></a>00343 <span class="comment"> Other examples of svecs usage can be found in the k-means module.</span> |
| <a name="l00344"></a>00344 <span class="comment"></span> |
| <a name="l00345"></a>00345 <span class="comment">@sa File svec.sql_in documenting the SQL functions.</span> |
| <a name="l00346"></a>00346 <span class="comment"></span> |
| <a name="l00347"></a>00347 <span class="comment">@internal</span> |
| <a name="l00348"></a>00348 <span class="comment">@sa File sparse_vector.c documenting the implementation in C.</span> |
| <a name="l00349"></a>00349 <span class="comment">@endinternal</span> |
| <a name="l00350"></a>00350 <span class="comment">*/</span> |
| <a name="l00351"></a>00351 |
| <a name="l00352"></a>00352 |
| <a name="l00353"></a>00353 --! @file svec.sql_in |
| <a name="l00354"></a>00354 --! |
| <a name="l00355"></a>00355 |
| <a name="l00356"></a>00356 -- DROP SCHEMA MADLIB_SCHEMA CASCADE; |
| <a name="l00357"></a>00357 -- CREATE SCHEMA MADLIB_SCHEMA; |
| <a name="l00358"></a>00358 |
| <a name="l00359"></a>00359 -- DROP TYPE IF EXISTS MADLIB_SCHEMA.svec CASCADE; |
| <a name="l00360"></a>00360 CREATE TYPE MADLIB_SCHEMA.svec; |
| <a name="l00361"></a>00361 |
| <a name="l00362"></a>00362 --! SVEC constructor from CSTRING. |
| <a name="l00363"></a>00363 --! |
| <a name="l00364"></a>00364 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_in(cstring) |
| <a name="l00365"></a>00365 RETURNS MADLIB_SCHEMA.svec |
| <a name="l00366"></a>00366 AS 'MODULE_PATHNAME<span class="stringliteral">'</span> |
| <a name="l00367"></a>00367 <span class="stringliteral"> LANGUAGE C IMMUTABLE STRICT;</span> |
| <a name="l00368"></a>00368 <span class="stringliteral"></span> |
| <a name="l00369"></a>00369 <span class="stringliteral">--! Converts SVEC to CSTRING.</span> |
| <a name="l00370"></a>00370 <span class="stringliteral">--!</span> |
| <a name="l00371"></a>00371 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_out(MADLIB_SCHEMA.svec)</span> |
| <a name="l00372"></a>00372 <span class="stringliteral"> RETURNS cstring</span> |
| <a name="l00373"></a>00373 <span class="stringliteral"> AS '</span>MODULE_PATHNAME<span class="stringliteral">'</span> |
| <a name="l00374"></a>00374 <span class="stringliteral"> LANGUAGE C IMMUTABLE STRICT;</span> |
| <a name="l00375"></a>00375 <span class="stringliteral"></span> |
| <a name="l00376"></a>00376 <span class="stringliteral">--! Converts SVEC internal representation to SVEC.</span> |
| <a name="l00377"></a>00377 <span class="stringliteral">--!</span> |
| <a name="l00378"></a>00378 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_recv(internal)</span> |
| <a name="l00379"></a>00379 <span class="stringliteral"> RETURNS MADLIB_SCHEMA.svec</span> |
| <a name="l00380"></a>00380 <span class="stringliteral"> AS '</span>MODULE_PATHNAME<span class="stringliteral">'</span> |
| <a name="l00381"></a>00381 <span class="stringliteral"> LANGUAGE C IMMUTABLE STRICT;</span> |
| <a name="l00382"></a>00382 <span class="stringliteral"></span> |
| <a name="l00383"></a>00383 <span class="stringliteral">--! Converts SVEC to BYTEA.</span> |
| <a name="l00384"></a>00384 <span class="stringliteral">--!</span> |
| <a name="l00385"></a>00385 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_send(MADLIB_SCHEMA.svec)</span> |
| <a name="l00386"></a><a class="code" href="svec_8sql__in.html#abe896192db26c02d5c517a5ccf2144f1">00386</a> <span class="stringliteral"> RETURNS bytea</span> |
| <a name="l00387"></a>00387 <span class="stringliteral"> AS '</span>MODULE_PATHNAME<span class="stringliteral">'</span> |
| <a name="l00388"></a>00388 <span class="stringliteral"> LANGUAGE C IMMUTABLE STRICT;</span> |
| <a name="l00389"></a>00389 <span class="stringliteral"></span> |
| <a name="l00390"></a>00390 <span class="stringliteral">CREATE TYPE MADLIB_SCHEMA.svec (</span> |
| <a name="l00391"></a>00391 <span class="stringliteral"> internallength = VARIABLE, </span> |
| <a name="l00392"></a>00392 <span class="stringliteral"> input = MADLIB_SCHEMA.svec_in,</span> |
| <a name="l00393"></a><a class="code" href="svec_8sql__in.html#a3db4af36acd318030ae57d2bfd19387a">00393</a> <span class="stringliteral"> output = MADLIB_SCHEMA.svec_out,</span> |
| <a name="l00394"></a>00394 <span class="stringliteral"> send = MADLIB_SCHEMA.svec_send,</span> |
| <a name="l00395"></a>00395 <span class="stringliteral"> receive = MADLIB_SCHEMA.svec_recv,</span> |
| <a name="l00396"></a>00396 <span class="stringliteral"> storage=EXTENDED,</span> |
| <a name="l00397"></a>00397 <span class="stringliteral"> alignment = double</span> |
| <a name="l00398"></a>00398 <span class="stringliteral">);</span> |
| <a name="l00399"></a>00399 <span class="stringliteral"></span> |
| <a name="l00400"></a><a class="code" href="svec_8sql__in.html#a585ea8bcb1d0647ef1295187b87405b2">00400</a> <span class="stringliteral">--! Basic floating point scalar operator: MIN.</span> |
| <a name="l00401"></a>00401 <span class="stringliteral">--!</span> |
| <a name="l00402"></a>00402 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dmin(float8,float8) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8_min<span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00403"></a>00403 <span class="stringliteral"></span> |
| <a name="l00404"></a>00404 <span class="stringliteral">--! Basic floating point scalar operator: MAX.</span> |
| <a name="l00405"></a>00405 <span class="stringliteral">--!</span> |
| <a name="l00406"></a>00406 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dmax(float8,float8) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8_max<span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00407"></a><a class="code" href="svec_8sql__in.html#a617557435170136b2781070c0a268b83">00407</a> <span class="stringliteral"></span> |
| <a name="l00408"></a>00408 <span class="stringliteral">--! Counts the number of non-zero entries in the input vector; the second argument is capped at 1, then added to the first; used as the sfunc in the svec_count_nonzero() aggregate below.</span> |
| <a name="l00409"></a>00409 <span class="stringliteral">--!</span> |
| <a name="l00410"></a>00410 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_count(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec </span> |
| <a name="l00411"></a>00411 <span class="stringliteral">AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a6a21e25d3f50053c888a0bd126f831f0">svec_count</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00412"></a>00412 <span class="stringliteral"></span> |
| <a name="l00413"></a>00413 <span class="stringliteral">--! Adds two SVECs together, element by element.</span> |
| <a name="l00414"></a>00414 <span class="stringliteral">--!</span> |
| <a name="l00415"></a>00415 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_plus(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a612d8920c61e6fdf18dd4e3e9c69c979">svec_plus</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00416"></a>00416 <span class="stringliteral"></span> |
| <a name="l00417"></a>00417 <span class="stringliteral">--! Minus second SVEC from the first, element by element.</span> |
| <a name="l00418"></a>00418 <span class="stringliteral">--!</span> |
| <a name="l00419"></a>00419 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_minus(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a170890a165bf662d343339ffc2a187cf">svec_minus</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00420"></a>00420 <span class="stringliteral"></span> |
| <a name="l00421"></a>00421 <span class="stringliteral">--! Computes the logarithm of each element of the input SVEC.</span> |
| <a name="l00422"></a>00422 <span class="stringliteral">--!</span> |
| <a name="l00423"></a>00423 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_log(MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#aab641f9db3deed5bbfa7e050c531e9c1">svec_log</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00424"></a><a class="code" href="svec_8sql__in.html#ad1011a13839994adbb1eb3e643c9074d">00424</a> <span class="stringliteral"></span> |
| <a name="l00425"></a>00425 <span class="stringliteral">--! Divides the first SVEC by the second, element by element.</span> |
| <a name="l00426"></a>00426 <span class="stringliteral">--!</span> |
| <a name="l00427"></a>00427 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_div(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a78a38512c860085e31f6153b8118cbe9">svec_div</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00428"></a><a class="code" href="svec_8sql__in.html#aa05abd8cb32253c07c0f2224861256a5">00428</a> <span class="stringliteral"></span> |
| <a name="l00429"></a>00429 <span class="stringliteral">--! Multiplies two SVEVs together, element by element.</span> |
| <a name="l00430"></a>00430 <span class="stringliteral">--!</span> |
| <a name="l00431"></a>00431 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_mult(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a27f0629942dba2e395b005c728d53ac3">svec_mult</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00432"></a><a class="code" href="svec_8sql__in.html#a6a21e25d3f50053c888a0bd126f831f0">00432</a> <span class="stringliteral"></span> |
| <a name="l00433"></a>00433 <span class="stringliteral">--! Raises each element of the first SVEC to the power given by second SVEC, which must have dimension 1 (a scalar).</span> |
| <a name="l00434"></a>00434 <span class="stringliteral">--!</span> |
| <a name="l00435"></a>00435 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_pow(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#ab5166565f3482768db33ee677acc3d96">svec_pow</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00436"></a>00436 <span class="stringliteral"></span> |
| <a name="l00437"></a><a class="code" href="svec_8sql__in.html#a612d8920c61e6fdf18dd4e3e9c69c979">00437</a> <span class="stringliteral">--! Returns true if two SVECs are equal. If the two SVEC'</span>s are of different size, then will <span class="keywordflow">return</span> <span class="keyword">false</span>. |
| <a name="l00438"></a>00438 --! |
| <a name="l00439"></a>00439 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_eq(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS <span class="keywordtype">boolean</span> AS <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'svec_eq'</span> STRICT LANGUAGE C IMMUTABLE; |
| <a name="l00440"></a>00440 |
| <a name="l00441"></a><a class="code" href="svec_8sql__in.html#a170890a165bf662d343339ffc2a187cf">00441</a> --! Returns <span class="keyword">true</span> <span class="keywordflow">if</span> two SVECs are equal, not counting zeros (zero equals anything). If the two SVEC<span class="stringliteral">'s are of different size, then the function essentially zero-pads the shorter one and performs the comparison.</span> |
| <a name="l00442"></a>00442 <span class="stringliteral">--!</span> |
| <a name="l00443"></a>00443 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_eq_non_zero(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS boolean AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#ab3a1cccd709379973f100e5eb35559d2">svec_eq_non_zero</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE;</span> |
| <a name="l00444"></a>00444 <span class="stringliteral"></span> |
| <a name="l00445"></a><a class="code" href="svec_8sql__in.html#aab641f9db3deed5bbfa7e050c531e9c1">00445</a> <span class="stringliteral">--! Returns true if left svec contains right one, meaning that every non-zero value in the right svec equals left one</span> |
| <a name="l00446"></a>00446 <span class="stringliteral">--!</span> |
| <a name="l00447"></a>00447 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_contains(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS boolean AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#afdef1c6bf65ffc0e838cf10f33ae5557">svec_contains</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00448"></a>00448 <span class="stringliteral"></span> |
| <a name="l00449"></a><a class="code" href="svec_8sql__in.html#a78a38512c860085e31f6153b8118cbe9">00449</a> <span class="stringliteral">--! Returns true if two float8 arrays are equal</span> |
| <a name="l00450"></a>00450 <span class="stringliteral">--!</span> |
| <a name="l00451"></a>00451 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_eq(float8[],float8[]) RETURNS boolean AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8arr_equals<span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00452"></a>00452 <span class="stringliteral"></span> |
| <a name="l00453"></a><a class="code" href="svec_8sql__in.html#a27f0629942dba2e395b005c728d53ac3">00453</a> <span class="stringliteral">--! Minus second array from the first array, element by element.</span> |
| <a name="l00454"></a>00454 <span class="stringliteral">--!</span> |
| <a name="l00455"></a>00455 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_minus_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a4c82ac5de8e026c85e83aae4e0f06220">float8arr_minus_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00456"></a>00456 <span class="stringliteral"></span> |
| <a name="l00457"></a><a class="code" href="svec_8sql__in.html#ab5166565f3482768db33ee677acc3d96">00457</a> <span class="stringliteral">--! Minus second SVEC from the first array, element by element.</span> |
| <a name="l00458"></a>00458 <span class="stringliteral">--!</span> |
| <a name="l00459"></a>00459 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_minus_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a457f2f9210baba1c13820801c42cd06a">float8arr_minus_svec</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00460"></a>00460 <span class="stringliteral"></span> |
| <a name="l00461"></a><a class="code" href="svec_8sql__in.html#adceeff7e2f2e43b3e17219bca5d4fea0">00461</a> <span class="stringliteral">--! Minus second array from the first SVEC, element by element.</span> |
| <a name="l00462"></a>00462 <span class="stringliteral">--!</span> |
| <a name="l00463"></a>00463 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_minus_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#adf39975fbbd8a39629569c622db33ab9">svec_minus_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00464"></a>00464 <span class="stringliteral"></span> |
| <a name="l00465"></a><a class="code" href="svec_8sql__in.html#ab3a1cccd709379973f100e5eb35559d2">00465</a> <span class="stringliteral">--! Adds two arrays together, element by element.</span> |
| <a name="l00466"></a>00466 <span class="stringliteral">--!</span> |
| <a name="l00467"></a>00467 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_plus_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a6bb068ab6ba775619fe787ed845f5a0d">float8arr_plus_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00468"></a>00468 <span class="stringliteral"></span> |
| <a name="l00469"></a><a class="code" href="svec_8sql__in.html#afdef1c6bf65ffc0e838cf10f33ae5557">00469</a> <span class="stringliteral">--! Adds an array and an SVEC, element by element.</span> |
| <a name="l00470"></a>00470 <span class="stringliteral">--!</span> |
| <a name="l00471"></a>00471 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_plus_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a98aa60ec0c58c828b0a72c75d604322e">float8arr_plus_svec</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00472"></a>00472 <span class="stringliteral"></span> |
| <a name="l00473"></a><a class="code" href="svec_8sql__in.html#a0684988340d533c00523951f9a95107e">00473</a> <span class="stringliteral">--! Adds an SVEC and an array, element by element.</span> |
| <a name="l00474"></a>00474 <span class="stringliteral">--!</span> |
| <a name="l00475"></a>00475 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_plus_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#aaeb54c952836c83c7f21a1c62a77955f">svec_plus_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00476"></a>00476 <span class="stringliteral"></span> |
| <a name="l00477"></a><a class="code" href="svec_8sql__in.html#a4c82ac5de8e026c85e83aae4e0f06220">00477</a> <span class="stringliteral">--! Multiplies two float8 arrays, element by element.</span> |
| <a name="l00478"></a>00478 <span class="stringliteral">--!</span> |
| <a name="l00479"></a>00479 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_mult_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#abb0b3f155c45bb370ef7adac49096835">float8arr_mult_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00480"></a>00480 <span class="stringliteral"></span> |
| <a name="l00481"></a><a class="code" href="svec_8sql__in.html#a457f2f9210baba1c13820801c42cd06a">00481</a> <span class="stringliteral">--! Multiplies an array and an SVEC, element by element.</span> |
| <a name="l00482"></a>00482 <span class="stringliteral">--!</span> |
| <a name="l00483"></a>00483 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_mult_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a0e7dd7a82b41f4b8344efa21208e1637">float8arr_mult_svec</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00484"></a>00484 <span class="stringliteral"></span> |
| <a name="l00485"></a><a class="code" href="svec_8sql__in.html#adf39975fbbd8a39629569c622db33ab9">00485</a> <span class="stringliteral">--! Multiplies an SVEC and an array, element by element.</span> |
| <a name="l00486"></a>00486 <span class="stringliteral">--!</span> |
| <a name="l00487"></a>00487 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_mult_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a6e6916baaf0a7ae0079424ce0565c8b4">svec_mult_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00488"></a>00488 <span class="stringliteral"></span> |
| <a name="l00489"></a><a class="code" href="svec_8sql__in.html#a6bb068ab6ba775619fe787ed845f5a0d">00489</a> <span class="stringliteral">--! Divides a float8 array by another, element by element.</span> |
| <a name="l00490"></a>00490 <span class="stringliteral">--!</span> |
| <a name="l00491"></a>00491 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_div_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a20d4a7b907e967351f6439640482e0f9">float8arr_div_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00492"></a>00492 <span class="stringliteral"></span> |
| <a name="l00493"></a><a class="code" href="svec_8sql__in.html#a98aa60ec0c58c828b0a72c75d604322e">00493</a> <span class="stringliteral">--! Divides a float8 array by an SVEC, element by element.</span> |
| <a name="l00494"></a>00494 <span class="stringliteral">--!</span> |
| <a name="l00495"></a>00495 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_div_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a5c4ac1cc9a2ee3057958070b8e7bffcc">float8arr_div_svec</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00496"></a>00496 <span class="stringliteral"></span> |
| <a name="l00497"></a><a class="code" href="svec_8sql__in.html#aaeb54c952836c83c7f21a1c62a77955f">00497</a> <span class="stringliteral">--! Divides an SVEC by a float8 array, element by element.</span> |
| <a name="l00498"></a>00498 <span class="stringliteral">--!</span> |
| <a name="l00499"></a>00499 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_div_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a211cf37584f54087dabc1fac14ed12dd">svec_div_float8arr</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00500"></a>00500 <span class="stringliteral"></span> |
| <a name="l00501"></a><a class="code" href="svec_8sql__in.html#abb0b3f155c45bb370ef7adac49096835">00501</a> <span class="stringliteral">--! Computes the dot product of two SVECs.</span> |
| <a name="l00502"></a>00502 <span class="stringliteral">--!</span> |
| <a name="l00503"></a>00503 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a4eeaf69c84d7ce0e46adc93e38b2b4f3">svec_dot</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00504"></a>00504 <span class="stringliteral"></span> |
| <a name="l00505"></a><a class="code" href="svec_8sql__in.html#a0e7dd7a82b41f4b8344efa21208e1637">00505</a> <span class="stringliteral">--! Computes the dot product of two float8 arrays.</span> |
| <a name="l00506"></a>00506 <span class="stringliteral">--!</span> |
| <a name="l00507"></a>00507 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(float8[],float8[]) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8arr_dot<span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00508"></a>00508 <span class="stringliteral"></span> |
| <a name="l00509"></a><a class="code" href="svec_8sql__in.html#a6e6916baaf0a7ae0079424ce0565c8b4">00509</a> <span class="stringliteral">--! Computes the dot product of an SVEC and a float8 array.</span> |
| <a name="l00510"></a>00510 <span class="stringliteral">--!</span> |
| <a name="l00511"></a>00511 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(MADLIB_SCHEMA.svec,float8[]) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>svec_dot_float8arr<span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00512"></a>00512 <span class="stringliteral"></span> |
| <a name="l00513"></a><a class="code" href="svec_8sql__in.html#a20d4a7b907e967351f6439640482e0f9">00513</a> <span class="stringliteral">--! Computes the dot product of a float8 array and an SVEC.</span> |
| <a name="l00514"></a>00514 <span class="stringliteral">--!</span> |
| <a name="l00515"></a>00515 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(float8[],MADLIB_SCHEMA.svec) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8arr_dot_svec<span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00516"></a>00516 <span class="stringliteral"></span> |
| <a name="l00517"></a><a class="code" href="svec_8sql__in.html#a5c4ac1cc9a2ee3057958070b8e7bffcc">00517</a> <span class="stringliteral">--! Computes the l2norm of an SVEC.</span> |
| <a name="l00518"></a>00518 <span class="stringliteral">--!</span> |
| <a name="l00519"></a>00519 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2norm(MADLIB_SCHEMA.svec) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a475f0f3e4602e8278b582e099fce2487">svec_l2norm</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00520"></a>00520 <span class="stringliteral"></span> |
| <a name="l00521"></a><a class="code" href="svec_8sql__in.html#a211cf37584f54087dabc1fac14ed12dd">00521</a> <span class="stringliteral">--! Computes the l2norm of a float8 array.</span> |
| <a name="l00522"></a>00522 <span class="stringliteral">--!</span> |
| <a name="l00523"></a>00523 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2norm(float8[]) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8arr_l2norm<span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00524"></a>00524 <span class="stringliteral"></span> |
| <a name="l00525"></a><a class="code" href="svec_8sql__in.html#a4eeaf69c84d7ce0e46adc93e38b2b4f3">00525</a> <span class="stringliteral">--! Computes the l2norm distance between two SVECs.</span> |
| <a name="l00526"></a>00526 <span class="stringliteral">--!</span> |
| <a name="l00527"></a>00527 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.l2norm(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) </span> |
| <a name="l00528"></a>00528 <span class="stringliteral">RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>svec_svec_l2norm<span class="stringliteral">' LANGUAGE C STRICT IMMUTABLE;</span> |
| <a name="l00529"></a><a class="code" href="svec_8sql__in.html#af870f06fd4c51f585515b6306f64fe3b">00529</a> <span class="stringliteral"></span> |
| <a name="l00530"></a>00530 <span class="stringliteral">--! Computes the l1norm distance between two SVECs.</span> |
| <a name="l00531"></a>00531 <span class="stringliteral">--!</span> |
| <a name="l00532"></a>00532 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.l1norm(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) </span> |
| <a name="l00533"></a><a class="code" href="svec_8sql__in.html#a93f4a0901681fc11e847615a4aba0255">00533</a> <span class="stringliteral">RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>svec_svec_l1norm<span class="stringliteral">' LANGUAGE C STRICT IMMUTABLE;</span> |
| <a name="l00534"></a>00534 <span class="stringliteral"></span> |
| <a name="l00535"></a>00535 <span class="stringliteral">--! Computes the l1norm of an SVEC.</span> |
| <a name="l00536"></a>00536 <span class="stringliteral">--!</span> |
| <a name="l00537"></a><a class="code" href="svec_8sql__in.html#a47b111663b39ec8646891edec8ab3925">00537</a> <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l1norm(MADLIB_SCHEMA.svec) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#ae60f7aaa5710c765d08b6c3906e0c9f0">svec_l1norm</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00538"></a>00538 <span class="stringliteral"></span> |
| <a name="l00539"></a>00539 <span class="stringliteral">--! Computes the l1norm of a float8 array.</span> |
| <a name="l00540"></a>00540 <span class="stringliteral">--!</span> |
| <a name="l00541"></a><a class="code" href="svec_8sql__in.html#a475f0f3e4602e8278b582e099fce2487">00541</a> <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l1norm(float8[]) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8arr_l1norm<span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00542"></a>00542 <span class="stringliteral"></span> |
| <a name="l00543"></a>00543 <span class="stringliteral">--! Computes the angle between two SVECs in radians.</span> |
| <a name="l00544"></a>00544 <span class="stringliteral">--!</span> |
| <a name="l00545"></a><a class="code" href="svec_8sql__in.html#a536fbd3c596af5ea8ddfa2a3ca3e141c">00545</a> <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.angle(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) </span> |
| <a name="l00546"></a>00546 <span class="stringliteral">RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>svec_svec_angle<span class="stringliteral">' LANGUAGE C STRICT IMMUTABLE;</span> |
| <a name="l00547"></a>00547 <span class="stringliteral"></span> |
| <a name="l00548"></a>00548 <span class="stringliteral">--! Computes the Tanimoto distance between two SVECs.</span> |
| <a name="l00549"></a><a class="code" href="svec_8sql__in.html#a1b6bb42a5176b020aed12734df23aca9">00549</a> <span class="stringliteral">--!</span> |
| <a name="l00550"></a>00550 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.tanimoto_distance(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) </span> |
| <a name="l00551"></a>00551 <span class="stringliteral">RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>svec_svec_tanimoto_distance<span class="stringliteral">' LANGUAGE C STRICT IMMUTABLE;</span> |
| <a name="l00552"></a>00552 <span class="stringliteral"></span> |
| <a name="l00553"></a>00553 <span class="stringliteral">--! Unnests an SVEC into a table of uncompressed values </span> |
| <a name="l00554"></a><a class="code" href="svec_8sql__in.html#a9e9b64c93b29c19adfb670f0171f14bf">00554</a> <span class="stringliteral">--!</span> |
| <a name="l00555"></a>00555 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_unnest(MADLIB_SCHEMA.svec) RETURNS setof float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a87b45a983da4066fa7f35b17ccecf699">svec_unnest</a><span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00556"></a>00556 <span class="stringliteral"></span> |
| <a name="l00557"></a>00557 <span class="stringliteral">--! Appends an element to the back of an SVEC.</span> |
| <a name="l00558"></a>00558 <span class="stringliteral">--!</span> |
| <a name="l00559"></a><a class="code" href="svec_8sql__in.html#ae60f7aaa5710c765d08b6c3906e0c9f0">00559</a> <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_pivot(MADLIB_SCHEMA.svec,float8) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a929bde3bc91b67300d9d370b6a1495f1">svec_pivot</a><span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00560"></a>00560 <span class="stringliteral"></span> |
| <a name="l00561"></a>00561 <span class="stringliteral">--! Sums the elements of an SVEC.</span> |
| <a name="l00562"></a>00562 <span class="stringliteral">--!</span> |
| <a name="l00563"></a><a class="code" href="svec_8sql__in.html#ae5ac6f098519439b76e03091022c9508">00563</a> <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_elsum(MADLIB_SCHEMA.svec) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>svec_summate<span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00564"></a>00564 <span class="stringliteral"></span> |
| <a name="l00565"></a>00565 <span class="stringliteral">--! Sums the elements of a float8 array.</span> |
| <a name="l00566"></a>00566 <span class="stringliteral">--!</span> |
| <a name="l00567"></a><a class="code" href="svec_8sql__in.html#a7e395ee71f6cf05afa76d89a72d45bec">00567</a> <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_elsum(float8[]) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8arr_summate<span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00568"></a>00568 <span class="stringliteral"></span> |
| <a name="l00569"></a>00569 <span class="stringliteral">--! Computes the median element of a float8 array.</span> |
| <a name="l00570"></a>00570 <span class="stringliteral">--!</span> |
| <a name="l00571"></a>00571 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_median(float8[]) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>float8arr_median<span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00572"></a><a class="code" href="svec_8sql__in.html#a98222e58bc519865a26643a61611b717">00572</a> <span class="stringliteral"></span> |
| <a name="l00573"></a>00573 <span class="stringliteral">--! Computes the median element of an SVEC.</span> |
| <a name="l00574"></a>00574 <span class="stringliteral">--!</span> |
| <a name="l00575"></a>00575 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_median(MADLIB_SCHEMA.svec) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a2284a118fe03465203ecea8c34acefa5">svec_median</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00576"></a>00576 <span class="stringliteral"></span> |
| <a name="l00577"></a><a class="code" href="svec_8sql__in.html#a87b45a983da4066fa7f35b17ccecf699">00577</a> <span class="stringliteral">--! Compares an SVEC to a float8, and returns positions of all elements not equal to the float as an array. Element index here starts at 0.</span> |
| <a name="l00578"></a>00578 <span class="stringliteral">--!</span> |
| <a name="l00579"></a>00579 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_nonbase_positions(MADLIB_SCHEMA.svec, FLOAT8) RETURNS INT8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a5bc053a080fb38601ad91045dc3ffe74">svec_nonbase_positions</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE;</span> |
| <a name="l00580"></a>00580 <span class="stringliteral"></span> |
| <a name="l00581"></a><a class="code" href="svec_8sql__in.html#a929bde3bc91b67300d9d370b6a1495f1">00581</a> <span class="stringliteral">--! Compares an SVEC to a float8, and returns values of all elements not equal to the float as an array.</span> |
| <a name="l00582"></a>00582 <span class="stringliteral">--!</span> |
| <a name="l00583"></a>00583 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_nonbase_values(MADLIB_SCHEMA.svec, FLOAT8) RETURNS FLOAT8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a076dcbc0a278bb3b5161b0db2ad8fa44">svec_nonbase_values</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00584"></a>00584 <span class="stringliteral"></span> |
| <a name="l00585"></a><a class="code" href="svec_8sql__in.html#a00a7b3260b9fde9b55061e6bf58a028a">00585</a> <span class="stringliteral"></span> |
| <a name="l00586"></a>00586 <span class="stringliteral">--! Casts an int2 into an SVEC.</span> |
| <a name="l00587"></a>00587 <span class="stringliteral">--!</span> |
| <a name="l00588"></a>00588 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int2(int2) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#af69458bf9b2906ca471d027966b13e6f">svec_cast_int2</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00589"></a><a class="code" href="svec_8sql__in.html#afb2076f09f00e512a62c06d4d33e5922">00589</a> <span class="stringliteral"></span> |
| <a name="l00590"></a>00590 <span class="stringliteral">--! Casts an int4 into an SVEC.</span> |
| <a name="l00591"></a>00591 <span class="stringliteral">--!</span> |
| <a name="l00592"></a>00592 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int4(int4) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#abc01ac6b36ea9d689d338fd72abbd540">svec_cast_int4</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00593"></a><a class="code" href="svec_8sql__in.html#a2284a118fe03465203ecea8c34acefa5">00593</a> <span class="stringliteral"></span> |
| <a name="l00594"></a>00594 <span class="stringliteral">--! Casts an int8 into an SVEC.</span> |
| <a name="l00595"></a>00595 <span class="stringliteral">--!</span> |
| <a name="l00596"></a>00596 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int8(bigint) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a9ea167c01fb2999dc5aaf5e8e21f5e8f">svec_cast_int8</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00597"></a><a class="code" href="svec_8sql__in.html#af9950e9ce4770738f2ce368d8124f142">00597</a> <span class="stringliteral"></span> |
| <a name="l00598"></a>00598 <span class="stringliteral">--! Casts a float4 into an SVEC.</span> |
| <a name="l00599"></a>00599 <span class="stringliteral">--!</span> |
| <a name="l00600"></a>00600 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float4(float4) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a1f1025124d5423cc1505991414f17582">svec_cast_float4</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00601"></a><a class="code" href="svec_8sql__in.html#a5bc053a080fb38601ad91045dc3ffe74">00601</a> <span class="stringliteral"></span> |
| <a name="l00602"></a>00602 <span class="stringliteral">--! Casts a float8 into an SVEC.</span> |
| <a name="l00603"></a>00603 <span class="stringliteral">--!</span> |
| <a name="l00604"></a>00604 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float8(float8) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#af42e4b15879949032a68139c59443aac">svec_cast_float8</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00605"></a><a class="code" href="svec_8sql__in.html#a076dcbc0a278bb3b5161b0db2ad8fa44">00605</a> <span class="stringliteral"></span> |
| <a name="l00606"></a>00606 <span class="stringliteral">--! Casts a numeric into an SVEC.</span> |
| <a name="l00607"></a>00607 <span class="stringliteral">--!</span> |
| <a name="l00608"></a>00608 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_numeric(numeric) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a50de0278ff7ceeff33a2ea4ca5fdf1a0">svec_cast_numeric</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00609"></a>00609 <span class="stringliteral"></span> |
| <a name="l00610"></a><a class="code" href="svec_8sql__in.html#af69458bf9b2906ca471d027966b13e6f">00610</a> <span class="stringliteral">--! Casts an int2 into a float8 array.</span> |
| <a name="l00611"></a>00611 <span class="stringliteral">--!</span> |
| <a name="l00612"></a>00612 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int2(int2) RETURNS float8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a5e38a27f556a6ac88549efec37da786f">float8arr_cast_int2</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00613"></a>00613 <span class="stringliteral"></span> |
| <a name="l00614"></a><a class="code" href="svec_8sql__in.html#abc01ac6b36ea9d689d338fd72abbd540">00614</a> <span class="stringliteral">--! Casts an int4 into a float8 array.</span> |
| <a name="l00615"></a>00615 <span class="stringliteral">--!</span> |
| <a name="l00616"></a>00616 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int4(int4) RETURNS float8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a9c05d02233680a2e96dc6058155e4483">float8arr_cast_int4</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00617"></a>00617 <span class="stringliteral"></span> |
| <a name="l00618"></a><a class="code" href="svec_8sql__in.html#a9ea167c01fb2999dc5aaf5e8e21f5e8f">00618</a> <span class="stringliteral">--! Casts an int8 into a float8 array.</span> |
| <a name="l00619"></a>00619 <span class="stringliteral">--!</span> |
| <a name="l00620"></a>00620 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int8(bigint) RETURNS float8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a4862b4e281323db16e9be4dfd681db2e">float8arr_cast_int8</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00621"></a>00621 <span class="stringliteral"></span> |
| <a name="l00622"></a><a class="code" href="svec_8sql__in.html#a1f1025124d5423cc1505991414f17582">00622</a> <span class="stringliteral">--! Casts a float4 into a float8 array.</span> |
| <a name="l00623"></a>00623 <span class="stringliteral">--!</span> |
| <a name="l00624"></a>00624 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_float4(float4) RETURNS float8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a2a6e17fd9dafc349c7cfa070486e6ad1">float8arr_cast_float4</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00625"></a>00625 <span class="stringliteral"></span> |
| <a name="l00626"></a><a class="code" href="svec_8sql__in.html#af42e4b15879949032a68139c59443aac">00626</a> <span class="stringliteral">--! Casts a float8 into a float8 array.</span> |
| <a name="l00627"></a>00627 <span class="stringliteral">--!</span> |
| <a name="l00628"></a>00628 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_float8(float8) RETURNS float8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#af8db439cf1a73749052f06fc30c7d282">float8arr_cast_float8</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00629"></a>00629 <span class="stringliteral"></span> |
| <a name="l00630"></a><a class="code" href="svec_8sql__in.html#a50de0278ff7ceeff33a2ea4ca5fdf1a0">00630</a> <span class="stringliteral">--! Casts a numeric into a float8 array.</span> |
| <a name="l00631"></a>00631 <span class="stringliteral">--!</span> |
| <a name="l00632"></a>00632 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_numeric(numeric) RETURNS float8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a0bc8ef7e7b8e37b784c81a940bd817f0">float8arr_cast_numeric</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00633"></a>00633 <span class="stringliteral"></span> |
| <a name="l00634"></a><a class="code" href="svec_8sql__in.html#a5e38a27f556a6ac88549efec37da786f">00634</a> <span class="stringliteral">--! Casts a float8 into an SVEC.</span> |
| <a name="l00635"></a>00635 <span class="stringliteral">--!</span> |
| <a name="l00636"></a>00636 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float8arr(float8[]) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a96025250e64f049a053c5696b3b96e02">svec_cast_float8arr</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE; </span> |
| <a name="l00637"></a>00637 <span class="stringliteral"></span> |
| <a name="l00638"></a><a class="code" href="svec_8sql__in.html#a9c05d02233680a2e96dc6058155e4483">00638</a> <span class="stringliteral">--! Casts an array of int8 positions, float8 values into an SVEC.</span> |
| <a name="l00639"></a>00639 <span class="stringliteral">--!</span> |
| <a name="l00640"></a>00640 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_positions_float8arr(int8[],float8[],int8,float8) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a0ee423729fbca5abd46c86fa81d51f23">svec_cast_positions_float8arr</a><span class="stringliteral">' STRICT LANGUAGE C IMMUTABLE;</span> |
| <a name="l00641"></a>00641 <span class="stringliteral"></span> |
| <a name="l00642"></a><a class="code" href="svec_8sql__in.html#a4862b4e281323db16e9be4dfd681db2e">00642</a> <span class="stringliteral">--! Casts an SVEC into a float8 array.</span> |
| <a name="l00643"></a>00643 <span class="stringliteral">--!</span> |
| <a name="l00644"></a>00644 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_return_array(MADLIB_SCHEMA.svec) RETURNS float8[] AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a7decda276d7ff1e9340dd44e0e7419c0">svec_return_array</a><span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00645"></a>00645 <span class="stringliteral"></span> |
| <a name="l00646"></a><a class="code" href="svec_8sql__in.html#a2a6e17fd9dafc349c7cfa070486e6ad1">00646</a> <span class="stringliteral">--! Concatenates two SVECs.</span> |
| <a name="l00647"></a>00647 <span class="stringliteral">--!</span> |
| <a name="l00648"></a>00648 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_concat(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a24f184bef083fd9068c28fc94dad8054">svec_concat</a><span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00649"></a>00649 <span class="stringliteral"></span> |
| <a name="l00650"></a><a class="code" href="svec_8sql__in.html#af8db439cf1a73749052f06fc30c7d282">00650</a> <span class="stringliteral">--! Replicates n copies of an SVEC and concatenates them together.</span> |
| <a name="l00651"></a>00651 <span class="stringliteral">--!</span> |
| <a name="l00652"></a>00652 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_concat_replicate(int4,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a34cb5f83e0c010aacc719b8b078bfeb9">svec_concat_replicate</a><span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00653"></a>00653 <span class="stringliteral"></span> |
| <a name="l00654"></a><a class="code" href="svec_8sql__in.html#a0bc8ef7e7b8e37b784c81a940bd817f0">00654</a> <span class="stringliteral">--! Returns the dimension of an SVEC.</span> |
| <a name="l00655"></a>00655 <span class="stringliteral">--!</span> |
| <a name="l00656"></a>00656 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dimension(MADLIB_SCHEMA.svec) RETURNS integer AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#ab8d1acbe4e8551755fef217b506bed8a">svec_dimension</a><span class="stringliteral">' LANGUAGE C IMMUTABLE; </span> |
| <a name="l00657"></a>00657 <span class="stringliteral"></span> |
| <a name="l00658"></a><a class="code" href="svec_8sql__in.html#a96025250e64f049a053c5696b3b96e02">00658</a> <span class="stringliteral">--! Applies a given function to each element of an SVEC.</span> |
| <a name="l00659"></a>00659 <span class="stringliteral">--!</span> |
| <a name="l00660"></a>00660 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_lapply(text,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a0d94c44dde95a00e3d802dee6d7c01eb">svec_lapply</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00661"></a>00661 <span class="stringliteral"></span> |
| <a name="l00662"></a><a class="code" href="svec_8sql__in.html#a0ee423729fbca5abd46c86fa81d51f23">00662</a> <span class="stringliteral">--! Appends a run-length block to the back of an SVEC.</span> |
| <a name="l00663"></a>00663 <span class="stringliteral">--!</span> |
| <a name="l00664"></a>00664 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_append(MADLIB_SCHEMA.svec,float8,int8) RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a3950b17b103ceeddca520a0f0d097ddc">svec_append</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00665"></a>00665 <span class="stringliteral"></span> |
| <a name="l00666"></a><a class="code" href="svec_8sql__in.html#a7decda276d7ff1e9340dd44e0e7419c0">00666</a> <span class="stringliteral">--! Projects onto an element of an SVEC.</span> |
| <a name="l00667"></a>00667 <span class="stringliteral">--!</span> |
| <a name="l00668"></a>00668 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_proj(MADLIB_SCHEMA.svec,int4) RETURNS float8 AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a8787222aec691f94d9808d1369aa401c">svec_proj</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00669"></a>00669 <span class="stringliteral"></span> |
| <a name="l00670"></a><a class="code" href="svec_8sql__in.html#a24f184bef083fd9068c28fc94dad8054">00670</a> <span class="stringliteral">--! Extracts a subvector of an SVEC given the subvector'</span>s start and end indices. |
| <a name="l00671"></a>00671 --! |
| <a name="l00672"></a>00672 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_subvec(MADLIB_SCHEMA.svec,int4,int4) RETURNS MADLIB_SCHEMA.svec AS <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'svec_subvec'</span> LANGUAGE C IMMUTABLE; |
| <a name="l00673"></a>00673 |
| <a name="l00674"></a><a class="code" href="svec_8sql__in.html#a34cb5f83e0c010aacc719b8b078bfeb9">00674</a> --! Reverses the elements of an SVEC. |
| <a name="l00675"></a>00675 --! |
| <a name="l00676"></a>00676 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_reverse(MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'svec_reverse'</span> LANGUAGE C IMMUTABLE; |
| <a name="l00677"></a>00677 |
| <a name="l00678"></a><a class="code" href="svec_8sql__in.html#ab8d1acbe4e8551755fef217b506bed8a">00678</a> --! Replaces the subvector of a given SVEC at a given start index with another SVEC. Note that element index should start at 1. |
| <a name="l00679"></a>00679 --! |
| <a name="l00680"></a>00680 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_change(MADLIB_SCHEMA.svec,int4,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'svec_change'</span> LANGUAGE C IMMUTABLE; |
| <a name="l00681"></a>00681 |
| <a name="l00682"></a><a class="code" href="svec_8sql__in.html#a0d94c44dde95a00e3d802dee6d7c01eb">00682</a> --! Computes the hash of an SVEC. |
| <a name="l00683"></a>00683 --! |
| <a name="l00684"></a>00684 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_hash(MADLIB_SCHEMA.svec) RETURNS int4 AS <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'svec_hash'</span> STRICT LANGUAGE C IMMUTABLE; |
| <a name="l00685"></a>00685 |
| <a name="l00686"></a><a class="code" href="svec_8sql__in.html#a3950b17b103ceeddca520a0f0d097ddc">00686</a> --! Computes the word-occurence vector of a document |
| <a name="l00687"></a>00687 --! |
| <a name="l00688"></a>00688 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_sfv(text[], text[]) RETURNS MADLIB_SCHEMA.svec AS |
| <a name="l00689"></a>00689 <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'gp_extract_feature_histogram'</span> LANGUAGE C IMMUTABLE; |
| <a name="l00690"></a><a class="code" href="svec_8sql__in.html#a8787222aec691f94d9808d1369aa401c">00690</a> |
| <a name="l00691"></a>00691 --! Sorts an array of texts. This <span class="keyword">function</span> should be in MADlib common. |
| <a name="l00692"></a>00692 --! |
| <a name="l00693"></a>00693 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_sort(text[]) RETURNS text[] AS $$ |
| <a name="l00694"></a><a class="code" href="svec_8sql__in.html#a5cb3446de5fc117befe88ccb1ebb0e4e">00694</a> SELECT array(SELECT unnest($1::text[]) ORDER BY 1); |
| <a name="l00695"></a>00695 $$ LANGUAGE SQL; |
| <a name="l00696"></a>00696 |
| <a name="l00697"></a>00697 --! Converts an svec to a text <span class="keywordtype">string</span> |
| <a name="l00698"></a><a class="code" href="svec_8sql__in.html#a4a221435ca91b6fa45114e689ee96010">00698</a> --! |
| <a name="l00699"></a>00699 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_to_string(MADLIB_SCHEMA.svec) |
| <a name="l00700"></a>00700 RETURNS text AS <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'svec_to_string'</span> STRICT LANGUAGE C IMMUTABLE; |
| <a name="l00701"></a>00701 |
| <a name="l00702"></a><a class="code" href="svec_8sql__in.html#a59407764a1cbf1937da39cf39a2f447c">00702</a> --! Converts a text <span class="keywordtype">string</span> to an svec |
| <a name="l00703"></a>00703 --! |
| <a name="l00704"></a>00704 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_from_string(text) |
| <a name="l00705"></a>00705 RETURNS MADLIB_SCHEMA.svec AS <span class="stringliteral">'MODULE_PATHNAME'</span>, <span class="stringliteral">'svec_from_string'</span> STRICT LANGUAGE C IMMUTABLE; |
| <a name="l00706"></a><a class="code" href="svec_8sql__in.html#a0bfa8f8d083282bc9e8caf6f03bb5251">00706</a> |
| <a name="l00707"></a>00707 |
| <a name="l00708"></a>00708 <span class="comment">/*</span> |
| <a name="l00709"></a>00709 <span class="comment">DROP OPERATOR IF EXISTS || ( MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l00710"></a><a class="code" href="svec_8sql__in.html#a375acd521ed9cb05f63b3696dcc10bf4">00710</a> <span class="comment">DROP OPERATOR IF EXISTS - ( MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l00711"></a>00711 <span class="comment">DROP OPERATOR IF EXISTS + ( MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l00712"></a>00712 <span class="comment">DROP OPERATOR IF EXISTS / ( MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l00713"></a>00713 <span class="comment">DROP OPERATOR IF EXISTS %*% ( MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l00714"></a>00714 <span class="comment">DROP OPERATOR IF EXISTS * ( MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l00715"></a><a class="code" href="svec_8sql__in.html#a91c23a7ce58932f48f5ab3579ea0309e">00715</a> <span class="comment">DROP OPERATOR IF EXISTS ^ ( MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l00716"></a>00716 <span class="comment">*/</span> |
| <a name="l00717"></a>00717 |
| <a name="l00718"></a>00718 CREATE OPERATOR MADLIB_SCHEMA.|| ( |
| <a name="l00719"></a>00719 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00720"></a>00720 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00721"></a><a class="code" href="svec_8sql__in.html#a1de746ebd23530e72ba4f031ac41d155">00721</a> PROCEDURE = MADLIB_SCHEMA.svec_concat |
| <a name="l00722"></a>00722 ); |
| <a name="l00723"></a>00723 |
| <a name="l00724"></a>00724 CREATE OPERATOR MADLIB_SCHEMA.- ( |
| <a name="l00725"></a>00725 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00726"></a><a class="code" href="svec_8sql__in.html#a1f5e8911574cf30cc979478040bd3262">00726</a> RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00727"></a>00727 PROCEDURE = MADLIB_SCHEMA.svec_minus |
| <a name="l00728"></a>00728 ); |
| <a name="l00729"></a>00729 CREATE OPERATOR MADLIB_SCHEMA.+ ( |
| <a name="l00730"></a>00730 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00731"></a>00731 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00732"></a>00732 PROCEDURE = MADLIB_SCHEMA.svec_plus |
| <a name="l00733"></a>00733 ); |
| <a name="l00734"></a>00734 CREATE OPERATOR MADLIB_SCHEMA./ ( |
| <a name="l00735"></a>00735 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00736"></a>00736 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00737"></a>00737 PROCEDURE = MADLIB_SCHEMA.svec_div |
| <a name="l00738"></a>00738 ); |
| <a name="l00739"></a>00739 CREATE OPERATOR MADLIB_SCHEMA.%*% ( |
| <a name="l00740"></a>00740 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00741"></a>00741 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00742"></a>00742 PROCEDURE = MADLIB_SCHEMA.svec_dot |
| <a name="l00743"></a>00743 ); |
| <a name="l00744"></a>00744 CREATE OPERATOR MADLIB_SCHEMA.* ( |
| <a name="l00745"></a>00745 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00746"></a>00746 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00747"></a>00747 PROCEDURE = MADLIB_SCHEMA.svec_mult |
| <a name="l00748"></a>00748 ); |
| <a name="l00749"></a>00749 CREATE OPERATOR MADLIB_SCHEMA.^ ( |
| <a name="l00750"></a>00750 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00751"></a>00751 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00752"></a>00752 PROCEDURE = MADLIB_SCHEMA.svec_pow |
| <a name="l00753"></a>00753 ); |
| <a name="l00754"></a>00754 |
| <a name="l00755"></a>00755 -- float8[] operators |
| <a name="l00756"></a>00756 -- DROP OPERATOR IF EXISTS = ( float8[], float8[]); |
| <a name="l00757"></a>00757 <span class="comment">/*</span> |
| <a name="l00758"></a>00758 <span class="comment">DROP OPERATOR IF EXISTS %*% ( float8[], MADLIB_SCHEMA.svec);</span> |
| <a name="l00759"></a>00759 <span class="comment">DROP OPERATOR IF EXISTS %*% ( MADLIB_SCHEMA.svec, float8[]);</span> |
| <a name="l00760"></a>00760 <span class="comment">DROP OPERATOR IF EXISTS %*% ( float8[], float8[]);</span> |
| <a name="l00761"></a>00761 <span class="comment">DROP OPERATOR IF EXISTS - ( float8[], float8[]);</span> |
| <a name="l00762"></a>00762 <span class="comment">DROP OPERATOR IF EXISTS + ( float8[], float8[]);</span> |
| <a name="l00763"></a>00763 <span class="comment">DROP OPERATOR IF EXISTS * ( float8[], float8[]);</span> |
| <a name="l00764"></a>00764 <span class="comment">DROP OPERATOR IF EXISTS / ( float8[], float8[]);</span> |
| <a name="l00765"></a>00765 <span class="comment">DROP OPERATOR IF EXISTS - ( float8[], MADLIB_SCHEMA.svec);</span> |
| <a name="l00766"></a>00766 <span class="comment">DROP OPERATOR IF EXISTS + ( float8[], MADLIB_SCHEMA.svec);</span> |
| <a name="l00767"></a>00767 <span class="comment">DROP OPERATOR IF EXISTS * ( float8[], MADLIB_SCHEMA.svec);</span> |
| <a name="l00768"></a>00768 <span class="comment">DROP OPERATOR IF EXISTS / ( float8[], MADLIB_SCHEMA.svec);</span> |
| <a name="l00769"></a>00769 <span class="comment">DROP OPERATOR IF EXISTS - ( MADLIB_SCHEMA.svec, float8[]);</span> |
| <a name="l00770"></a>00770 <span class="comment">DROP OPERATOR IF EXISTS + ( MADLIB_SCHEMA.svec, float8[]);</span> |
| <a name="l00771"></a>00771 <span class="comment">DROP OPERATOR IF EXISTS * ( MADLIB_SCHEMA.svec, float8[]);</span> |
| <a name="l00772"></a>00772 <span class="comment">DROP OPERATOR IF EXISTS / ( MADLIB_SCHEMA.svec, float8[]);</span> |
| <a name="l00773"></a>00773 <span class="comment">*/</span> |
| <a name="l00774"></a>00774 |
| <a name="l00775"></a>00775 <span class="comment">/*</span> |
| <a name="l00776"></a>00776 <span class="comment">CREATE OPERATOR MADLIB_SCHEMA.= (</span> |
| <a name="l00777"></a>00777 <span class="comment"> leftarg = float8[], </span> |
| <a name="l00778"></a>00778 <span class="comment"> rightarg = float8[], </span> |
| <a name="l00779"></a>00779 <span class="comment"> procedure = MADLIB_SCHEMA.float8arr_eq,</span> |
| <a name="l00780"></a>00780 <span class="comment"> commutator = operator(MADLIB_SCHEMA.=) ,</span> |
| <a name="l00781"></a>00781 <span class="comment">-- negator = operator(MADLIB_SCHEMA.<>) ,</span> |
| <a name="l00782"></a>00782 <span class="comment"> restrict = eqsel, join = eqjoinsel</span> |
| <a name="l00783"></a>00783 <span class="comment">);</span> |
| <a name="l00784"></a>00784 <span class="comment">*/</span> |
| <a name="l00785"></a>00785 |
| <a name="l00786"></a>00786 CREATE OPERATOR MADLIB_SCHEMA.%*% ( |
| <a name="l00787"></a>00787 LEFTARG = float8[], |
| <a name="l00788"></a>00788 RIGHTARG = float8[], |
| <a name="l00789"></a>00789 PROCEDURE = MADLIB_SCHEMA.svec_dot |
| <a name="l00790"></a>00790 ); |
| <a name="l00791"></a>00791 CREATE OPERATOR MADLIB_SCHEMA.%*% ( |
| <a name="l00792"></a>00792 LEFTARG = float8[], |
| <a name="l00793"></a>00793 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00794"></a>00794 PROCEDURE = MADLIB_SCHEMA.svec_dot |
| <a name="l00795"></a>00795 ); |
| <a name="l00796"></a>00796 CREATE OPERATOR MADLIB_SCHEMA.%*% ( |
| <a name="l00797"></a>00797 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00798"></a>00798 RIGHTARG = float8[], |
| <a name="l00799"></a>00799 PROCEDURE = MADLIB_SCHEMA.svec_dot |
| <a name="l00800"></a>00800 ); |
| <a name="l00801"></a>00801 CREATE OPERATOR MADLIB_SCHEMA.- ( |
| <a name="l00802"></a>00802 LEFTARG = float8[], |
| <a name="l00803"></a>00803 RIGHTARG = float8[], |
| <a name="l00804"></a>00804 PROCEDURE = MADLIB_SCHEMA.float8arr_minus_float8arr |
| <a name="l00805"></a>00805 ); |
| <a name="l00806"></a>00806 CREATE OPERATOR MADLIB_SCHEMA.+ ( |
| <a name="l00807"></a>00807 LEFTARG = float8[], |
| <a name="l00808"></a>00808 RIGHTARG = float8[], |
| <a name="l00809"></a>00809 PROCEDURE = MADLIB_SCHEMA.float8arr_plus_float8arr |
| <a name="l00810"></a>00810 ); |
| <a name="l00811"></a>00811 CREATE OPERATOR MADLIB_SCHEMA.* ( |
| <a name="l00812"></a>00812 LEFTARG = float8[], |
| <a name="l00813"></a>00813 RIGHTARG = float8[], |
| <a name="l00814"></a>00814 PROCEDURE = MADLIB_SCHEMA.float8arr_mult_float8arr |
| <a name="l00815"></a>00815 ); |
| <a name="l00816"></a>00816 CREATE OPERATOR MADLIB_SCHEMA./ ( |
| <a name="l00817"></a>00817 LEFTARG = float8[], |
| <a name="l00818"></a>00818 RIGHTARG = float8[], |
| <a name="l00819"></a>00819 PROCEDURE = MADLIB_SCHEMA.float8arr_div_float8arr |
| <a name="l00820"></a>00820 ); |
| <a name="l00821"></a>00821 |
| <a name="l00822"></a>00822 CREATE OPERATOR MADLIB_SCHEMA.- ( |
| <a name="l00823"></a>00823 LEFTARG = float8[], |
| <a name="l00824"></a>00824 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00825"></a>00825 PROCEDURE = MADLIB_SCHEMA.float8arr_minus_svec |
| <a name="l00826"></a>00826 ); |
| <a name="l00827"></a>00827 CREATE OPERATOR MADLIB_SCHEMA.+ ( |
| <a name="l00828"></a>00828 LEFTARG = float8[], |
| <a name="l00829"></a>00829 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00830"></a>00830 PROCEDURE = MADLIB_SCHEMA.float8arr_plus_svec |
| <a name="l00831"></a>00831 ); |
| <a name="l00832"></a>00832 CREATE OPERATOR MADLIB_SCHEMA.* ( |
| <a name="l00833"></a>00833 LEFTARG = float8[], |
| <a name="l00834"></a>00834 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00835"></a>00835 PROCEDURE = MADLIB_SCHEMA.float8arr_mult_svec |
| <a name="l00836"></a>00836 ); |
| <a name="l00837"></a>00837 CREATE OPERATOR MADLIB_SCHEMA./ ( |
| <a name="l00838"></a>00838 LEFTARG = float8[], |
| <a name="l00839"></a>00839 RIGHTARG = MADLIB_SCHEMA.svec, |
| <a name="l00840"></a>00840 PROCEDURE = MADLIB_SCHEMA.float8arr_div_svec |
| <a name="l00841"></a>00841 ); |
| <a name="l00842"></a>00842 |
| <a name="l00843"></a>00843 CREATE OPERATOR MADLIB_SCHEMA.- ( |
| <a name="l00844"></a>00844 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00845"></a>00845 RIGHTARG = float8[], |
| <a name="l00846"></a>00846 PROCEDURE = MADLIB_SCHEMA.svec_minus_float8arr |
| <a name="l00847"></a>00847 ); |
| <a name="l00848"></a>00848 CREATE OPERATOR MADLIB_SCHEMA.+ ( |
| <a name="l00849"></a>00849 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00850"></a>00850 RIGHTARG = float8[], |
| <a name="l00851"></a>00851 PROCEDURE = MADLIB_SCHEMA.svec_plus_float8arr |
| <a name="l00852"></a>00852 ); |
| <a name="l00853"></a>00853 CREATE OPERATOR MADLIB_SCHEMA.* ( |
| <a name="l00854"></a>00854 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00855"></a>00855 RIGHTARG = float8[], |
| <a name="l00856"></a>00856 PROCEDURE = MADLIB_SCHEMA.svec_mult_float8arr |
| <a name="l00857"></a>00857 ); |
| <a name="l00858"></a>00858 CREATE OPERATOR MADLIB_SCHEMA./ ( |
| <a name="l00859"></a>00859 LEFTARG = MADLIB_SCHEMA.svec, |
| <a name="l00860"></a>00860 RIGHTARG = float8[], |
| <a name="l00861"></a>00861 PROCEDURE = MADLIB_SCHEMA.svec_div_float8arr |
| <a name="l00862"></a>00862 ); |
| <a name="l00863"></a>00863 |
| <a name="l00864"></a>00864 <span class="comment">/*</span> |
| <a name="l00865"></a>00865 <span class="comment">DROP CAST IF EXISTS (int2 AS MADLIB_SCHEMA.svec) ;</span> |
| <a name="l00866"></a>00866 <span class="comment">DROP CAST IF EXISTS (integer AS MADLIB_SCHEMA.svec) ;</span> |
| <a name="l00867"></a>00867 <span class="comment">DROP CAST IF EXISTS (bigint AS MADLIB_SCHEMA.svec) ;</span> |
| <a name="l00868"></a>00868 <span class="comment">DROP CAST IF EXISTS (float4 AS MADLIB_SCHEMA.svec) ;</span> |
| <a name="l00869"></a>00869 <span class="comment">DROP CAST IF EXISTS (float8 AS MADLIB_SCHEMA.svec) ;</span> |
| <a name="l00870"></a>00870 <span class="comment">DROP CAST IF EXISTS (numeric AS MADLIB_SCHEMA.svec) ;</span> |
| <a name="l00871"></a>00871 <span class="comment">*/</span> |
| <a name="l00872"></a>00872 |
| <a name="l00873"></a>00873 CREATE CAST (int2 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int2(int2) ; -- AS IMPLICIT; |
| <a name="l00874"></a>00874 CREATE CAST (integer AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int4(integer) ; -- AS IMPLICIT; |
| <a name="l00875"></a>00875 CREATE CAST (bigint AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int8(bigint) ; -- AS IMPLICIT; |
| <a name="l00876"></a>00876 CREATE CAST (float4 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float4(float4) ; -- AS IMPLICIT; |
| <a name="l00877"></a>00877 CREATE CAST (float8 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float8(float8) ; -- AS IMPLICIT; |
| <a name="l00878"></a>00878 CREATE CAST (numeric AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_numeric(numeric) ; -- AS IMPLICIT; |
| <a name="l00879"></a>00879 |
| <a name="l00880"></a>00880 <span class="comment">/*</span> |
| <a name="l00881"></a>00881 <span class="comment">DROP CAST IF EXISTS (int2 AS float8[]) ;</span> |
| <a name="l00882"></a>00882 <span class="comment">DROP CAST IF EXISTS (integer AS float8[]) ;</span> |
| <a name="l00883"></a>00883 <span class="comment">DROP CAST IF EXISTS (bigint AS float8[]) ;</span> |
| <a name="l00884"></a>00884 <span class="comment">DROP CAST IF EXISTS (float4 AS float8[]) ;</span> |
| <a name="l00885"></a>00885 <span class="comment">DROP CAST IF EXISTS (float8 AS float8[]) ;</span> |
| <a name="l00886"></a>00886 <span class="comment">DROP CAST IF EXISTS (numeric AS float8[]) ;</span> |
| <a name="l00887"></a>00887 <span class="comment">*/</span> |
| <a name="l00888"></a>00888 |
| <a name="l00889"></a>00889 -- CREATE CAST (int2 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int2(int2) ; -- AS IMPLICIT; |
| <a name="l00890"></a>00890 -- CREATE CAST (integer AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int4(integer) ; -- AS IMPLICIT; |
| <a name="l00891"></a>00891 -- CREATE CAST (bigint AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int8(bigint) ; -- AS IMPLICIT; |
| <a name="l00892"></a>00892 -- CREATE CAST (float4 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_float4(float4) ; -- AS IMPLICIT; |
| <a name="l00893"></a>00893 -- CREATE CAST (float8 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_float8(float8) ; -- AS IMPLICIT; |
| <a name="l00894"></a>00894 -- CREATE CAST (numeric AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_numeric(numeric) ; -- AS IMPLICIT; |
| <a name="l00895"></a>00895 |
| <a name="l00896"></a>00896 -- DROP CAST IF EXISTS (MADLIB_SCHEMA.svec AS float8[]) ; |
| <a name="l00897"></a>00897 -- DROP CAST IF EXISTS (float8[] AS MADLIB_SCHEMA.svec) ; |
| <a name="l00898"></a>00898 |
| <a name="l00899"></a>00899 CREATE CAST (MADLIB_SCHEMA.svec AS float8[]) WITH FUNCTION MADLIB_SCHEMA.svec_return_array(MADLIB_SCHEMA.svec) ; -- AS IMPLICIT; |
| <a name="l00900"></a>00900 CREATE CAST (float8[] AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float8arr(float8[]) ; -- AS IMPLICIT; |
| <a name="l00901"></a>00901 |
| <a name="l00902"></a>00902 -- DROP OPERATOR IF EXISTS = (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) ; |
| <a name="l00903"></a>00903 |
| <a name="l00904"></a>00904 |
| <a name="l00905"></a>00905 CREATE OPERATOR MADLIB_SCHEMA.= ( |
| <a name="l00906"></a>00906 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_eq, |
| <a name="l00907"></a>00907 commutator = <span class="keyword">operator</span>(MADLIB_SCHEMA.=) , |
| <a name="l00908"></a>00908 -- negator = <span class="keyword">operator</span>(MADLIB_SCHEMA.<>) , |
| <a name="l00909"></a>00909 restrict = eqsel, join = eqjoinsel |
| <a name="l00910"></a>00910 ); |
| <a name="l00911"></a>00911 |
| <a name="l00912"></a>00912 --! Transition <span class="keyword">function</span> <span class="keywordflow">for</span> <a class="code" href="svec_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>(svec) aggregate |
| <a name="l00913"></a>00913 --! |
| <a name="l00914"></a>00914 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#afcf2f75cd00ab0ba269caf79dcfcc62c">svec_mean_transition</a>( FLOAT[], MADLIB_SCHEMA.svec) |
| <a name="l00915"></a>00915 RETURNS FLOAT[] AS 'MODULE_PATHNAME' |
| <a name="l00916"></a>00916 LANGUAGE C IMMUTABLE; |
| <a name="l00917"></a>00917 |
| <a name="l00918"></a>00918 --! Preliminary merge function for <a class="code" href="svec_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>(svec) aggregate |
| <a name="l00919"></a>00919 --! |
| <a name="l00920"></a>00920 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#ab161647a1498c85762779966790eab71">svec_mean_prefunc</a>( FLOAT[], FLOAT[]) |
| <a name="l00921"></a>00921 RETURNS FLOAT[] AS 'MODULE_PATHNAME' |
| <a name="l00922"></a>00922 LANGUAGE C IMMUTABLE; |
| <a name="l00923"></a>00923 |
| <a name="l00924"></a>00924 --! Final function for <a class="code" href="svec_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>(svec) aggregate |
| <a name="l00925"></a>00925 --! |
| <a name="l00926"></a>00926 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#ac3fc45511b50b5d054bf7bbeb952b98d">svec_mean_final</a>( FLOAT[]) |
| <a name="l00927"></a>00927 RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME' |
| <a name="l00928"></a>00928 LANGUAGE C IMMUTABLE; |
| <a name="l00929"></a>00929 |
| <a name="l00930"></a>00930 --! Aggregate that computes the element-wise <a class="code" href="svec_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a> of a list of vectors. |
| <a name="l00931"></a>00931 --! |
| <a name="l00932"></a>00932 CREATE AGGREGATE MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#a546b947319c9f48237120a31929bdfd9">mean</a>( MADLIB_SCHEMA.svec) ( |
| <a name="l00933"></a>00933 SFUNC = MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#afcf2f75cd00ab0ba269caf79dcfcc62c">svec_mean_transition</a>, |
| <a name="l00934"></a>00934 m4_ifdef(`__GREENPLUM__',`prefunc = MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#ab161647a1498c85762779966790eab71">svec_mean_prefunc</a>,') |
| <a name="l00935"></a>00935 FINALFUNC = MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#ac3fc45511b50b5d054bf7bbeb952b98d">svec_mean_final</a>, |
| <a name="l00936"></a><a class="code" href="svec_8sql__in.html#afcf2f75cd00ab0ba269caf79dcfcc62c">00936</a> STYPE = FLOAT[] |
| <a name="l00937"></a>00937 ); |
| <a name="l00938"></a>00938 |
| <a name="l00939"></a>00939 --! Aggregate that provides the element-wise sum of a list of vectors. |
| <a name="l00940"></a>00940 --! |
| <a name="l00941"></a>00941 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#af1ce6cdd7244ac0832d15c65b7ccc782">svec_sum</a>(MADLIB_SCHEMA.svec); |
| <a name="l00942"></a><a class="code" href="svec_8sql__in.html#ab161647a1498c85762779966790eab71">00942</a> CREATE AGGREGATE MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#af1ce6cdd7244ac0832d15c65b7ccc782">svec_sum</a> (MADLIB_SCHEMA.svec) ( |
| <a name="l00943"></a>00943 SFUNC = MADLIB_SCHEMA.<a class="code" href="svec_8sql__in.html#a612d8920c61e6fdf18dd4e3e9c69c979">svec_plus</a>, |
| <a name="l00944"></a>00944 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.svec_plus,') |
| <a name="l00945"></a>00945 INITCOND = '{1}:{0.}<span class="stringliteral">', -- Zero</span> |
| <a name="l00946"></a>00946 <span class="stringliteral"> STYPE = MADLIB_SCHEMA.svec</span> |
| <a name="l00947"></a>00947 <span class="stringliteral">);</span> |
| <a name="l00948"></a><a class="code" href="svec_8sql__in.html#ac3fc45511b50b5d054bf7bbeb952b98d">00948</a> <span class="stringliteral"></span> |
| <a name="l00949"></a>00949 <span class="stringliteral">--! Aggregate that provides a tally of nonzero entries in a list of vectors.</span> |
| <a name="l00950"></a>00950 <span class="stringliteral">--!</span> |
| <a name="l00951"></a>00951 <span class="stringliteral">-- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_count_nonzero(MADLIB_SCHEMA.svec);</span> |
| <a name="l00952"></a>00952 <span class="stringliteral">CREATE AGGREGATE MADLIB_SCHEMA.svec_count_nonzero (MADLIB_SCHEMA.svec) (</span> |
| <a name="l00953"></a>00953 <span class="stringliteral"> SFUNC = MADLIB_SCHEMA.svec_count,</span> |
| <a name="l00954"></a><a class="code" href="svec_8sql__in.html#a546b947319c9f48237120a31929bdfd9">00954</a> <span class="stringliteral"> m4_ifdef(`__GREENPLUM__'</span>,`prefunc=MADLIB_SCHEMA.svec_plus,<span class="stringliteral">')</span> |
| <a name="l00955"></a>00955 <span class="stringliteral"> INITCOND = '</span>{1}:{0.}<span class="stringliteral">', -- Zero</span> |
| <a name="l00956"></a>00956 <span class="stringliteral"> STYPE = MADLIB_SCHEMA.svec</span> |
| <a name="l00957"></a>00957 <span class="stringliteral">);</span> |
| <a name="l00958"></a>00958 <span class="stringliteral"></span> |
| <a name="l00959"></a>00959 <span class="stringliteral">--! Aggregate that turns a list of float8 values into an SVEC.</span> |
| <a name="l00960"></a>00960 <span class="stringliteral">--!</span> |
| <a name="l00961"></a>00961 <span class="stringliteral">-- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_agg(float8);</span> |
| <a name="l00962"></a>00962 <span class="stringliteral">CREATE</span> |
| <a name="l00963"></a>00963 <span class="stringliteral">m4_ifdef(`__GREENPLUM__'</span>, m4_ifdef(`__HAS_ORDERED_AGGREGATES__<span class="stringliteral">', `ORDERED'</span>)) |
| <a name="l00964"></a><a class="code" href="svec_8sql__in.html#af1ce6cdd7244ac0832d15c65b7ccc782">00964</a> AGGREGATE MADLIB_SCHEMA.svec_agg (float8) ( |
| <a name="l00965"></a>00965 SFUNC = MADLIB_SCHEMA.svec_pivot, |
| <a name="l00966"></a>00966 m4_ifdef(`__GREENPLUM__<span class="stringliteral">', m4_ifdef(`__HAS_ORDERED_AGGREGATES__'</span>, `<span class="stringliteral">', ``prefunc=MADLIB_SCHEMA.svec_concat,'</span><span class="stringliteral">'))</span> |
| <a name="l00967"></a>00967 <span class="stringliteral"> STYPE = MADLIB_SCHEMA.svec</span> |
| <a name="l00968"></a>00968 <span class="stringliteral">);</span> |
| <a name="l00969"></a>00969 <span class="stringliteral"></span> |
| <a name="l00970"></a>00970 <span class="stringliteral">--! Aggregate that computes the median element of a list of float8 values.</span> |
| <a name="l00971"></a>00971 <span class="stringliteral">--!</span> |
| <a name="l00972"></a>00972 <span class="stringliteral">-- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_median_inmemory(float8);</span> |
| <a name="l00973"></a>00973 <span class="stringliteral">CREATE AGGREGATE MADLIB_SCHEMA.svec_median_inmemory (float8) (</span> |
| <a name="l00974"></a><a class="code" href="svec_8sql__in.html#abebdcbe45de346aff874db008e842e65">00974</a> <span class="stringliteral"> SFUNC = MADLIB_SCHEMA.svec_pivot,</span> |
| <a name="l00975"></a>00975 <span class="stringliteral"> m4_ifdef(`__GREENPLUM__'</span>,`prefunc=MADLIB_SCHEMA.svec_concat,<span class="stringliteral">')</span> |
| <a name="l00976"></a>00976 <span class="stringliteral"> FINALFUNC = MADLIB_SCHEMA.svec_median,</span> |
| <a name="l00977"></a>00977 <span class="stringliteral"> STYPE = MADLIB_SCHEMA.svec</span> |
| <a name="l00978"></a>00978 <span class="stringliteral">);</span> |
| <a name="l00979"></a>00979 <span class="stringliteral"></span> |
| <a name="l00980"></a>00980 <span class="stringliteral">-- Comparisons based on L2 Norm</span> |
| <a name="l00981"></a>00981 <span class="stringliteral">--! Returns true if the l2 norm of the first SVEC is less than that of the second SVEC.</span> |
| <a name="l00982"></a>00982 <span class="stringliteral">--!</span> |
| <a name="l00983"></a>00983 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_lt(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#ab53b85cb3412c9172bf0ee04f6856c69">svec_l2_lt</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00984"></a><a class="code" href="svec_8sql__in.html#a4c1788ca9569ea3d0412ce18f99fa352">00984</a> <span class="stringliteral"></span> |
| <a name="l00985"></a>00985 <span class="stringliteral">--! Returns true if the l2 norm of the first SVEC is less than or equal to that of the second SVEC.</span> |
| <a name="l00986"></a>00986 <span class="stringliteral">--!</span> |
| <a name="l00987"></a>00987 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_le(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a4045437bce8b9a9bdb0eb3115c97ca99">svec_l2_le</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00988"></a>00988 <span class="stringliteral"></span> |
| <a name="l00989"></a>00989 <span class="stringliteral">--! Returns true if the l2 norm of the first SVEC is equal to that of the second SVEC.</span> |
| <a name="l00990"></a>00990 <span class="stringliteral">--!</span> |
| <a name="l00991"></a>00991 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_eq(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a9268d26c54c4b2905eb7938df95af8c0">svec_l2_eq</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00992"></a>00992 <span class="stringliteral"></span> |
| <a name="l00993"></a>00993 <span class="stringliteral">--! Returns true if the l2 norm of the first SVEC is not equal to that of the second SVEC.</span> |
| <a name="l00994"></a>00994 <span class="stringliteral">--!</span> |
| <a name="l00995"></a><a class="code" href="svec_8sql__in.html#a93400e39ecce2f11b9ceb08403420a43">00995</a> <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_ne(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#af35c08aadf164fa3bbc8678765bca643">svec_l2_ne</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l00996"></a>00996 <span class="stringliteral"></span> |
| <a name="l00997"></a>00997 <span class="stringliteral">--! Returns true if the l2 norm of the first SVEC is greater than that of the second SVEC.</span> |
| <a name="l00998"></a>00998 <span class="stringliteral">--!</span> |
| <a name="l00999"></a>00999 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_gt(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#ab2414d0d78286884cd199cf44c1d17b9">svec_l2_gt</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l01000"></a>01000 <span class="stringliteral"></span> |
| <a name="l01001"></a>01001 <span class="stringliteral">--! Returns true if the l2 norm of the first SVEC is greater than or equal to that of the second SVEC.</span> |
| <a name="l01002"></a>01002 <span class="stringliteral">--!</span> |
| <a name="l01003"></a>01003 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_ge(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#ac22b72fbae2a8f2b35b1c571d9f54dad">svec_l2_ge</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l01004"></a>01004 <span class="stringliteral"></span> |
| <a name="l01005"></a><a class="code" href="svec_8sql__in.html#ab53b85cb3412c9172bf0ee04f6856c69">01005</a> <span class="stringliteral">--! Returns a value indicating the relative values of the l2 norms of two SVECs.</span> |
| <a name="l01006"></a>01006 <span class="stringliteral">--!</span> |
| <a name="l01007"></a>01007 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_cmp(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS integer AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span><a class="code" href="svec_8sql__in.html#a8f72c8cf6d39f08d939f23cf1338a3c6">svec_l2_cmp</a><span class="stringliteral">' LANGUAGE C IMMUTABLE;</span> |
| <a name="l01008"></a>01008 <span class="stringliteral"></span> |
| <a name="l01009"></a><a class="code" href="svec_8sql__in.html#a4045437bce8b9a9bdb0eb3115c97ca99">01009</a> <span class="stringliteral">--! Normalizes an SVEC that is divides all elements by its norm/magnitude.</span> |
| <a name="l01010"></a>01010 <span class="stringliteral">--!</span> |
| <a name="l01011"></a>01011 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.normalize(MADLIB_SCHEMA.svec) </span> |
| <a name="l01012"></a>01012 <span class="stringliteral">RETURNS MADLIB_SCHEMA.svec AS '</span>MODULE_PATHNAME<span class="stringliteral">', '</span>svec_normalize<span class="stringliteral">' LANGUAGE C IMMUTABLE STRICT;</span> |
| <a name="l01013"></a><a class="code" href="svec_8sql__in.html#a9268d26c54c4b2905eb7938df95af8c0">01013</a> <span class="stringliteral"></span> |
| <a name="l01014"></a>01014 <span class="stringliteral">/*</span> |
| <a name="l01015"></a>01015 <span class="stringliteral">DROP OPERATOR IF EXISTS < (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;</span> |
| <a name="l01016"></a>01016 <span class="stringliteral">DROP OPERATOR IF EXISTS <= (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;</span> |
| <a name="l01017"></a><a class="code" href="svec_8sql__in.html#af35c08aadf164fa3bbc8678765bca643">01017</a> <span class="stringliteral">DROP OPERATOR IF EXISTS <> (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) ;</span> |
| <a name="l01018"></a>01018 <span class="stringliteral">DROP OPERATOR IF EXISTS == (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;</span> |
| <a name="l01019"></a>01019 <span class="stringliteral">DROP OPERATOR IF EXISTS > (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;</span> |
| <a name="l01020"></a>01020 <span class="stringliteral">DROP OPERATOR IF EXISTS >= (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;</span> |
| <a name="l01021"></a><a class="code" href="svec_8sql__in.html#ab2414d0d78286884cd199cf44c1d17b9">01021</a> <span class="stringliteral">DROP OPERATOR IF EXISTS *|| (int4, MADLIB_SCHEMA.svec) ;</span> |
| <a name="l01022"></a>01022 <span class="stringliteral">*/</span> |
| <a name="l01023"></a>01023 <span class="stringliteral"></span> |
| <a name="l01024"></a>01024 <span class="stringliteral">CREATE OPERATOR MADLIB_SCHEMA.< (</span> |
| <a name="l01025"></a><a class="code" href="svec_8sql__in.html#ac22b72fbae2a8f2b35b1c571d9f54dad">01025</a> <span class="stringliteral"> leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_lt,</span> |
| <a name="l01026"></a>01026 <span class="stringliteral"> commutator = operator(MADLIB_SCHEMA.>) , negator = operator(MADLIB_SCHEMA.>=) ,</span> |
| <a name="l01027"></a>01027 <span class="stringliteral"> restrict = scalarltsel, join = scalarltjoinsel</span> |
| <a name="l01028"></a>01028 <span class="stringliteral">);</span> |
| <a name="l01029"></a><a class="code" href="svec_8sql__in.html#a8f72c8cf6d39f08d939f23cf1338a3c6">01029</a> <span class="stringliteral">CREATE OPERATOR MADLIB_SCHEMA.<= (</span> |
| <a name="l01030"></a>01030 <span class="stringliteral"> leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_le,</span> |
| <a name="l01031"></a>01031 <span class="stringliteral"> commutator = operator(MADLIB_SCHEMA.>=) , negator = operator(MADLIB_SCHEMA.>) ,</span> |
| <a name="l01032"></a>01032 <span class="stringliteral"> restrict = scalarltsel, join = scalarltjoinsel</span> |
| <a name="l01033"></a><a class="code" href="svec_8sql__in.html#aace16abea7c63f136520fde6c28f1f28">01033</a> <span class="stringliteral">);</span> |
| <a name="l01034"></a>01034 <span class="stringliteral">CREATE OPERATOR MADLIB_SCHEMA.<> (</span> |
| <a name="l01035"></a>01035 <span class="stringliteral"> leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_eq,</span> |
| <a name="l01036"></a>01036 <span class="stringliteral"> commutator = operator(MADLIB_SCHEMA.<>) ,</span> |
| <a name="l01037"></a>01037 <span class="stringliteral"> negator = operator(MADLIB_SCHEMA.=),</span> |
| <a name="l01038"></a>01038 <span class="stringliteral"> restrict = eqsel, join = eqjoinsel</span> |
| <a name="l01039"></a>01039 <span class="stringliteral">);</span> |
| <a name="l01040"></a>01040 <span class="stringliteral">CREATE OPERATOR MADLIB_SCHEMA.== (</span> |
| <a name="l01041"></a>01041 <span class="stringliteral"> leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_eq,</span> |
| <a name="l01042"></a>01042 <span class="stringliteral"> commutator = operator(MADLIB_SCHEMA.=) ,</span> |
| <a name="l01043"></a>01043 <span class="stringliteral"> negator = operator(MADLIB_SCHEMA.<>) ,</span> |
| <a name="l01044"></a>01044 <span class="stringliteral"> restrict = eqsel, join = eqjoinsel</span> |
| <a name="l01045"></a>01045 <span class="stringliteral">);</span> |
| <a name="l01046"></a>01046 <span class="stringliteral">CREATE OPERATOR MADLIB_SCHEMA.>= (</span> |
| <a name="l01047"></a>01047 <span class="stringliteral"> leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_ge,</span> |
| <a name="l01048"></a>01048 <span class="stringliteral"> commutator = operator(MADLIB_SCHEMA.<=) , negator = operator(MADLIB_SCHEMA.<) ,</span> |
| <a name="l01049"></a>01049 <span class="stringliteral"> restrict = scalargtsel, join = scalargtjoinsel</span> |
| <a name="l01050"></a>01050 <span class="stringliteral">);</span> |
| <a name="l01051"></a>01051 <span class="stringliteral">CREATE OPERATOR MADLIB_SCHEMA.> (</span> |
| <a name="l01052"></a>01052 <span class="stringliteral"> leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_gt,</span> |
| <a name="l01053"></a>01053 <span class="stringliteral"> commutator = operator(MADLIB_SCHEMA.<) , negator = operator(MADLIB_SCHEMA.<=) ,</span> |
| <a name="l01054"></a>01054 <span class="stringliteral"> restrict = scalargtsel, join = scalargtjoinsel</span> |
| <a name="l01055"></a>01055 <span class="stringliteral">);</span> |
| <a name="l01056"></a>01056 <span class="stringliteral"></span> |
| <a name="l01057"></a>01057 <span class="stringliteral">CREATE OPERATOR MADLIB_SCHEMA.*|| (</span> |
| <a name="l01058"></a>01058 <span class="stringliteral"> leftarg = int4, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_concat_replicate</span> |
| <a name="l01059"></a>01059 <span class="stringliteral">);</span> |
| <a name="l01060"></a>01060 <span class="stringliteral"></span> |
| <a name="l01061"></a>01061 <span class="stringliteral">CREATE OPERATOR CLASS MADLIB_SCHEMA.svec_l2_ops</span> |
| <a name="l01062"></a>01062 <span class="stringliteral">DEFAULT FOR TYPE MADLIB_SCHEMA.svec USING btree AS</span> |
| <a name="l01063"></a>01063 <span class="stringliteral">OPERATOR 1 MADLIB_SCHEMA.< ,</span> |
| <a name="l01064"></a>01064 <span class="stringliteral">OPERATOR 2 MADLIB_SCHEMA.<= ,</span> |
| <a name="l01065"></a>01065 <span class="stringliteral">OPERATOR 3 MADLIB_SCHEMA.== ,</span> |
| <a name="l01066"></a>01066 <span class="stringliteral">OPERATOR 4 MADLIB_SCHEMA.>= ,</span> |
| <a name="l01067"></a>01067 <span class="stringliteral">OPERATOR 5 MADLIB_SCHEMA.> ,</span> |
| <a name="l01068"></a>01068 <span class="stringliteral">FUNCTION 1 MADLIB_SCHEMA.svec_l2_cmp(MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);</span> |
| <a name="l01069"></a>01069 <span class="stringliteral"></span> |
| </pre></div></div> |
| </div> |
| <div id="nav-path" class="navpath"> |
| <ul> |
| <li class="navelem"><a class="el" href="svec_8sql__in.html">svec.sql_in</a> </li> |
| <!-- window showing the filter options --> |
| <div id="MSearchSelectWindow" |
| onmouseover="return searchBox.OnSearchSelectShow()" |
| onmouseout="return searchBox.OnSearchSelectHide()" |
| onkeydown="return searchBox.OnSearchSelectKey(event)"> |
| <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a></div> |
| |
| <!-- iframe showing the search results (closed by default) --> |
| <div id="MSearchResultsWindow"> |
| <iframe src="javascript:void(0)" frameborder="0" |
| name="MSearchResults" id="MSearchResults"> |
| </iframe> |
| </div> |
| |
| |
| <li class="footer">Generated on Tue Apr 2 2013 14:57:03 for MADlib by |
| <a href="http://www.doxygen.org/index.html"> |
| <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li> |
| </ul> |
| </div> |
| |
| |
| </body> |
| </html> |