blob: 4ed9a6a2f5231a24c8a035e2f05358b187bc1b59 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>pyspark.ml.linalg &#8212; PySpark 3.5.5 documentation</title>
<link href="../../../_static/styles/theme.css?digest=1999514e3f237ded88cf" rel="stylesheet">
<link href="../../../_static/styles/pydata-sphinx-theme.css?digest=1999514e3f237ded88cf" rel="stylesheet">
<link rel="stylesheet"
href="../../../_static/vendor/fontawesome/5.13.0/css/all.min.css">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="../../../_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="../../../_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2">
<link rel="stylesheet" href="../../../_static/styles/pydata-sphinx-theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/pyspark.css" />
<link rel="preload" as="script" href="../../../_static/scripts/pydata-sphinx-theme.js?digest=1999514e3f237ded88cf">
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/language_data.js"></script>
<script src="../../../_static/clipboard.min.js"></script>
<script src="../../../_static/copybutton.js"></script>
<script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"inlineMath": [["$", "$"], ["\\(", "\\)"]], "processEscapes": true, "ignoreClass": "document", "processClass": "math|output_area"}})</script>
<link rel="canonical" href="https://spark.apache.org/docs/latest/api/python/_modules/pyspark/ml/linalg.html" />
<link rel="search" title="Search" href="../../../search.html" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="docsearch:language" content="None">
<!-- Google Analytics -->
</head>
<body data-spy="scroll" data-target="#bd-toc-nav" data-offset="80">
<div class="container-fluid" id="banner"></div>
<nav class="navbar navbar-light navbar-expand-lg bg-light fixed-top bd-navbar" id="navbar-main"><div class="container-xl">
<div id="navbar-start">
<a class="navbar-brand" href="../../../index.html">
<img src="../../../_static/spark-logo-reverse.png" class="logo" alt="logo">
</a>
</div>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-collapsible" aria-controls="navbar-collapsible" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar-collapsible" class="col-lg-9 collapse navbar-collapse">
<div id="navbar-center" class="mr-auto">
<div class="navbar-center-item">
<ul id="navbar-main-elements" class="navbar-nav">
<li class="toctree-l1 nav-item">
<a class="reference internal nav-link" href="../../../index.html">
Overview
</a>
</li>
<li class="toctree-l1 nav-item">
<a class="reference internal nav-link" href="../../../getting_started/index.html">
Getting Started
</a>
</li>
<li class="toctree-l1 nav-item">
<a class="reference internal nav-link" href="../../../user_guide/index.html">
User Guides
</a>
</li>
<li class="toctree-l1 nav-item">
<a class="reference internal nav-link" href="../../../reference/index.html">
API Reference
</a>
</li>
<li class="toctree-l1 nav-item">
<a class="reference internal nav-link" href="../../../development/index.html">
Development
</a>
</li>
<li class="toctree-l1 nav-item">
<a class="reference internal nav-link" href="../../../migration_guide/index.html">
Migration Guides
</a>
</li>
</ul>
</div>
</div>
<div id="navbar-end">
<div class="navbar-end-item">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div id="version-button" class="dropdown">
<button type="button" class="btn btn-secondary btn-sm navbar-btn dropdown-toggle" id="version_switcher_button" data-toggle="dropdown">
3.5.5
<span class="caret"></span>
</button>
<div id="version_switcher" class="dropdown-menu list-group-flush py-0" aria-labelledby="version_switcher_button">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div>
<script type="text/javascript">
// Function to construct the target URL from the JSON components
function buildURL(entry) {
var template = "https://spark.apache.org/docs/{version}/api/python/index.html"; // supplied by jinja
template = template.replace("{version}", entry.version);
return template;
}
// Function to check if corresponding page path exists in other version of docs
// and, if so, go there instead of the homepage of the other docs version
function checkPageExistsAndRedirect(event) {
const currentFilePath = "_modules/pyspark/ml/linalg.html",
otherDocsHomepage = event.target.getAttribute("href");
let tryUrl = `${otherDocsHomepage}${currentFilePath}`;
$.ajax({
type: 'HEAD',
url: tryUrl,
// if the page exists, go there
success: function() {
location.href = tryUrl;
}
}).fail(function() {
location.href = otherDocsHomepage;
});
return false;
}
// Function to populate the version switcher
(function () {
// get JSON config
$.getJSON("https://spark.apache.org/static/versions.json", function(data, textStatus, jqXHR) {
// create the nodes first (before AJAX calls) to ensure the order is
// correct (for now, links will go to doc version homepage)
$.each(data, function(index, entry) {
// if no custom name specified (e.g., "latest"), use version string
if (!("name" in entry)) {
entry.name = entry.version;
}
// construct the appropriate URL, and add it to the dropdown
entry.url = buildURL(entry);
const node = document.createElement("a");
node.setAttribute("class", "list-group-item list-group-item-action py-1");
node.setAttribute("href", `${entry.url}`);
node.textContent = `${entry.name}`;
node.onclick = checkPageExistsAndRedirect;
$("#version_switcher").append(node);
});
});
})();
</script>
</div>
</div>
</div>
</div>
</nav>
<div class="container-xl">
<div class="row">
<!-- Only show if we have sidebars configured, else just a small margin -->
<div class="col-12 col-md-3 bd-sidebar">
<div class="sidebar-start-items"><form class="bd-search d-flex align-items-center" action="../../../search.html" method="get">
<i class="icon fas fa-search"></i>
<input type="search" class="form-control" name="q" id="search-input" placeholder="Search the docs ..." aria-label="Search the docs ..." autocomplete="off" >
</form><nav class="bd-links" id="bd-docs-nav" aria-label="Main navigation">
<div class="bd-toc-item active">
</div>
</nav>
</div>
<div class="sidebar-end-items">
</div>
</div>
<div class="d-none d-xl-block col-xl-2 bd-toc">
</div>
<main class="col-12 col-md-9 col-xl-7 py-md-5 pl-md-5 pr-md-4 bd-content" role="main">
<div>
<h1>Source code for pyspark.ml.linalg</h1><div class="highlight"><pre>
<span></span><span class="c1">#</span>
<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one or more</span>
<span class="c1"># contributor license agreements. See the NOTICE file distributed with</span>
<span class="c1"># this work for additional information regarding copyright ownership.</span>
<span class="c1"># The ASF licenses this file to You under the Apache License, Version 2.0</span>
<span class="c1"># (the &quot;License&quot;); you may not use this file except in compliance with</span>
<span class="c1"># the License. You may obtain a copy of the License at</span>
<span class="c1">#</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">#</span>
<span class="c1"># Unless required by applicable law or agreed to in writing, software</span>
<span class="c1"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
<span class="c1"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="c1"># See the License for the specific language governing permissions and</span>
<span class="c1"># limitations under the License.</span>
<span class="c1">#</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">MLlib utilities for linear algebra. For dense vectors, MLlib</span>
<span class="sd">uses the NumPy `array` type, so you can simply pass NumPy arrays</span>
<span class="sd">around. For sparse vectors, users can construct a :class:`SparseVector`</span>
<span class="sd">object from MLlib or pass SciPy `scipy.sparse` column vectors if</span>
<span class="sd">SciPy is available in their environment.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">array</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">struct</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
<span class="n">UserDefinedType</span><span class="p">,</span>
<span class="n">StructField</span><span class="p">,</span>
<span class="n">StructType</span><span class="p">,</span>
<span class="n">ArrayType</span><span class="p">,</span>
<span class="n">DoubleType</span><span class="p">,</span>
<span class="n">IntegerType</span><span class="p">,</span>
<span class="n">ByteType</span><span class="p">,</span>
<span class="n">BooleanType</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
<span class="n">Any</span><span class="p">,</span>
<span class="n">Callable</span><span class="p">,</span>
<span class="n">cast</span><span class="p">,</span>
<span class="n">Dict</span><span class="p">,</span>
<span class="n">Iterable</span><span class="p">,</span>
<span class="n">List</span><span class="p">,</span>
<span class="n">Optional</span><span class="p">,</span>
<span class="n">overload</span><span class="p">,</span>
<span class="n">Sequence</span><span class="p">,</span>
<span class="n">Tuple</span><span class="p">,</span>
<span class="n">Type</span><span class="p">,</span>
<span class="n">TYPE_CHECKING</span><span class="p">,</span>
<span class="n">Union</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;Vector&quot;</span><span class="p">,</span>
<span class="s2">&quot;DenseVector&quot;</span><span class="p">,</span>
<span class="s2">&quot;SparseVector&quot;</span><span class="p">,</span>
<span class="s2">&quot;Vectors&quot;</span><span class="p">,</span>
<span class="s2">&quot;Matrix&quot;</span><span class="p">,</span>
<span class="s2">&quot;DenseMatrix&quot;</span><span class="p">,</span>
<span class="s2">&quot;SparseMatrix&quot;</span><span class="p">,</span>
<span class="s2">&quot;Matrices&quot;</span><span class="p">,</span>
<span class="p">]</span>
<span class="k">if</span> <span class="n">TYPE_CHECKING</span><span class="p">:</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.mllib._typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">NormType</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.ml._typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">VectorLike</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">scipy.sparse</span><span class="w"> </span><span class="kn">import</span> <span class="n">spmatrix</span>
<span class="c1"># Check whether we have SciPy. MLlib works without it too, but if we have it, some methods,</span>
<span class="c1"># such as _dot and _serialize_double_vector, start to support scipy.sparse matrices.</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">scipy.sparse</span>
<span class="n">_have_scipy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">except</span> <span class="ne">BaseException</span><span class="p">:</span>
<span class="c1"># No SciPy in environment, but that&#39;s okay</span>
<span class="n">_have_scipy</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_convert_to_vector</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="s2">&quot;VectorLike&quot;</span><span class="p">,</span> <span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="nb">range</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="s2">&quot;Vector&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">Vector</span><span class="p">):</span>
<span class="k">return</span> <span class="n">d</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="n">array</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">,</span> <span class="nb">range</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DenseVector</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">_have_scipy</span> <span class="ow">and</span> <span class="n">scipy</span><span class="o">.</span><span class="n">sparse</span><span class="o">.</span><span class="n">issparse</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
<span class="k">assert</span> <span class="n">cast</span><span class="p">(</span><span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Expected column vector&quot;</span>
<span class="c1"># Make sure the converted csc_matrix has sorted indices.</span>
<span class="n">csc</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span><span class="o">.</span><span class="n">tocsc</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">csc</span><span class="o">.</span><span class="n">has_sorted_indices</span><span class="p">:</span>
<span class="n">csc</span><span class="o">.</span><span class="n">sort_indices</span><span class="p">()</span>
<span class="k">return</span> <span class="n">SparseVector</span><span class="p">(</span><span class="n">cast</span><span class="p">(</span><span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">csc</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="n">csc</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;Cannot convert type </span><span class="si">%s</span><span class="s2"> into Vector&quot;</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_vector_size</span><span class="p">(</span><span class="n">v</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="s2">&quot;VectorLike&quot;</span><span class="p">,</span> <span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="nb">range</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the size of the vector.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; _vector_size([1., 2., 3.])</span>
<span class="sd"> 3</span>
<span class="sd"> &gt;&gt;&gt; _vector_size((1., 2., 3.))</span>
<span class="sd"> 3</span>
<span class="sd"> &gt;&gt;&gt; _vector_size(array.array(&#39;d&#39;, [1., 2., 3.]))</span>
<span class="sd"> 3</span>
<span class="sd"> &gt;&gt;&gt; _vector_size(np.zeros(3))</span>
<span class="sd"> 3</span>
<span class="sd"> &gt;&gt;&gt; _vector_size(np.zeros((3, 1)))</span>
<span class="sd"> 3</span>
<span class="sd"> &gt;&gt;&gt; _vector_size(np.zeros((1, 3)))</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> ValueError: Cannot treat an ndarray of shape (1, 3) as a vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">Vector</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="n">array</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">,</span> <span class="nb">range</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">==</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="k">if</span> <span class="n">v</span><span class="o">.</span><span class="n">ndim</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">ndim</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">v</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cannot treat an ndarray of shape </span><span class="si">%s</span><span class="s2"> as a vector&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">shape</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">_have_scipy</span> <span class="ow">and</span> <span class="n">scipy</span><span class="o">.</span><span class="n">sparse</span><span class="o">.</span><span class="n">issparse</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
<span class="k">assert</span> <span class="n">cast</span><span class="p">(</span><span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Expected column vector&quot;</span>
<span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;Cannot treat type </span><span class="si">%s</span><span class="s2"> as a vector&quot;</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">))</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_format_float</span><span class="p">(</span><span class="n">f</span><span class="p">:</span> <span class="nb">float</span><span class="p">,</span> <span class="n">digits</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">4</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="n">s</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">digits</span><span class="p">))</span>
<span class="k">if</span> <span class="s2">&quot;.&quot;</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="p">[:</span> <span class="n">s</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">digits</span><span class="p">]</span>
<span class="k">return</span> <span class="n">s</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_format_float_list</span><span class="p">(</span><span class="n">xs</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
<span class="k">return</span> <span class="p">[</span><span class="n">_format_float</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">]</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_double_to_long_bits</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="nb">float</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&quot;nan&quot;</span><span class="p">)</span>
<span class="c1"># pack double into 64 bits, then unpack as long int</span>
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">&quot;Q&quot;</span><span class="p">,</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">&quot;d&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">class</span><span class="w"> </span><span class="nc">VectorUDT</span><span class="p">(</span><span class="n">UserDefinedType</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> SQL user-defined type (UDT) for Vector.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@classmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sqlType</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">StructType</span><span class="p">:</span>
<span class="k">return</span> <span class="n">StructType</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;type&quot;</span><span class="p">,</span> <span class="n">ByteType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">,</span> <span class="n">IntegerType</span><span class="p">(),</span> <span class="kc">True</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;indices&quot;</span><span class="p">,</span> <span class="n">ArrayType</span><span class="p">(</span><span class="n">IntegerType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span> <span class="kc">True</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">ArrayType</span><span class="p">(</span><span class="n">DoubleType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span> <span class="kc">True</span><span class="p">),</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">module</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;pyspark.ml.linalg&quot;</span>
<span class="nd">@classmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scalaUDT</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;org.apache.spark.ml.linalg.VectorUDT&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">serialize</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">:</span> <span class="s2">&quot;Vector&quot;</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">List</span><span class="p">[</span><span class="nb">float</span><span class="p">]]:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">SparseVector</span><span class="p">):</span>
<span class="n">indices</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">indices</span><span class="p">]</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">values</span><span class="p">]</span>
<span class="k">return</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="n">indices</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">DenseVector</span><span class="p">):</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">]</span> <span class="c1"># type: ignore[attr-defined]</span>
<span class="k">return</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;cannot serialize </span><span class="si">%r</span><span class="s2"> of type </span><span class="si">%r</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">obj</span><span class="p">)))</span>
<span class="k">def</span><span class="w"> </span><span class="nf">deserialize</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">datum</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">List</span><span class="p">[</span><span class="nb">float</span><span class="p">]]</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;Vector&quot;</span><span class="p">:</span>
<span class="k">assert</span> <span class="p">(</span>
<span class="nb">len</span><span class="p">(</span><span class="n">datum</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span>
<span class="p">),</span> <span class="s2">&quot;VectorUDT.deserialize given row with length </span><span class="si">%d</span><span class="s2"> but requires 4&quot;</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">datum</span><span class="p">)</span>
<span class="n">tpe</span> <span class="o">=</span> <span class="n">datum</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">tpe</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">SparseVector</span><span class="p">(</span><span class="n">cast</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">datum</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="n">cast</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">datum</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">datum</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">tpe</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="n">DenseVector</span><span class="p">(</span><span class="n">datum</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;do not recognize type </span><span class="si">%r</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">tpe</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">simpleString</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;vector&quot;</span>
<span class="k">class</span><span class="w"> </span><span class="nc">MatrixUDT</span><span class="p">(</span><span class="n">UserDefinedType</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> SQL user-defined type (UDT) for Matrix.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@classmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sqlType</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">StructType</span><span class="p">:</span>
<span class="k">return</span> <span class="n">StructType</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;type&quot;</span><span class="p">,</span> <span class="n">ByteType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;numRows&quot;</span><span class="p">,</span> <span class="n">IntegerType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;numCols&quot;</span><span class="p">,</span> <span class="n">IntegerType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;colPtrs&quot;</span><span class="p">,</span> <span class="n">ArrayType</span><span class="p">(</span><span class="n">IntegerType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span> <span class="kc">True</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;rowIndices&quot;</span><span class="p">,</span> <span class="n">ArrayType</span><span class="p">(</span><span class="n">IntegerType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span> <span class="kc">True</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">ArrayType</span><span class="p">(</span><span class="n">DoubleType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span> <span class="kc">True</span><span class="p">),</span>
<span class="n">StructField</span><span class="p">(</span><span class="s2">&quot;isTransposed&quot;</span><span class="p">,</span> <span class="n">BooleanType</span><span class="p">(),</span> <span class="kc">False</span><span class="p">),</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">module</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;pyspark.ml.linalg&quot;</span>
<span class="nd">@classmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scalaUDT</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;org.apache.spark.ml.linalg.MatrixUDT&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">serialize</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">:</span> <span class="s2">&quot;Matrix&quot;</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">List</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">SparseMatrix</span><span class="p">):</span>
<span class="n">colPtrs</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">]</span>
<span class="n">rowIndices</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">]</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">values</span><span class="p">]</span>
<span class="k">return</span> <span class="p">(</span>
<span class="mi">0</span><span class="p">,</span>
<span class="n">obj</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span>
<span class="n">obj</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span>
<span class="n">colPtrs</span><span class="p">,</span>
<span class="n">rowIndices</span><span class="p">,</span>
<span class="n">values</span><span class="p">,</span>
<span class="nb">bool</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">DenseMatrix</span><span class="p">):</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">values</span><span class="p">]</span>
<span class="k">return</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="nb">bool</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;cannot serialize type </span><span class="si">%r</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">obj</span><span class="p">)))</span>
<span class="k">def</span><span class="w"> </span><span class="nf">deserialize</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">datum</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">List</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="nb">bool</span><span class="p">],</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;Matrix&quot;</span><span class="p">:</span>
<span class="k">assert</span> <span class="p">(</span>
<span class="nb">len</span><span class="p">(</span><span class="n">datum</span><span class="p">)</span> <span class="o">==</span> <span class="mi">7</span>
<span class="p">),</span> <span class="s2">&quot;MatrixUDT.deserialize given row with length </span><span class="si">%d</span><span class="s2"> but requires 7&quot;</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">datum</span><span class="p">)</span>
<span class="n">tpe</span> <span class="o">=</span> <span class="n">datum</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">tpe</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">SparseMatrix</span><span class="p">(</span><span class="o">*</span><span class="n">datum</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span> <span class="c1"># type: ignore[arg-type]</span>
<span class="k">elif</span> <span class="n">tpe</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="n">DenseMatrix</span><span class="p">(</span><span class="n">datum</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">datum</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">datum</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> <span class="n">datum</span><span class="p">[</span><span class="mi">6</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;do not recognize type </span><span class="si">%r</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">tpe</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">simpleString</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;matrix&quot;</span>
<div class="viewcode-block" id="Vector"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vector.html#pyspark.ml.linalg.Vector">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">Vector</span><span class="p">:</span>
<span class="n">__UDT__</span> <span class="o">=</span> <span class="n">VectorUDT</span><span class="p">()</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Abstract class for DenseVector and SparseVector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="Vector.toArray"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vector.html#pyspark.ml.linalg.Vector.toArray">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toArray</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert the vector into an numpy.ndarray</span>
<span class="sd"> :return: numpy.ndarray</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<span class="k">def</span><span class="w"> </span><span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<div class="viewcode-block" id="DenseVector"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseVector.html#pyspark.ml.linalg.DenseVector">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">DenseVector</span><span class="p">(</span><span class="n">Vector</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A dense vector represented by a value array. We use numpy array for</span>
<span class="sd"> storage and arithmetics will be delegated to the underlying numpy</span>
<span class="sd"> array.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; v = Vectors.dense([1.0, 2.0])</span>
<span class="sd"> &gt;&gt;&gt; u = Vectors.dense([3.0, 4.0])</span>
<span class="sd"> &gt;&gt;&gt; v + u</span>
<span class="sd"> DenseVector([4.0, 6.0])</span>
<span class="sd"> &gt;&gt;&gt; 2 - v</span>
<span class="sd"> DenseVector([1.0, 0.0])</span>
<span class="sd"> &gt;&gt;&gt; v / 2</span>
<span class="sd"> DenseVector([0.5, 1.0])</span>
<span class="sd"> &gt;&gt;&gt; v * u</span>
<span class="sd"> DenseVector([3.0, 8.0])</span>
<span class="sd"> &gt;&gt;&gt; u / v</span>
<span class="sd"> DenseVector([3.0, 2.0])</span>
<span class="sd"> &gt;&gt;&gt; u % 2</span>
<span class="sd"> DenseVector([1.0, 0.0])</span>
<span class="sd"> &gt;&gt;&gt; -v</span>
<span class="sd"> DenseVector([-1.0, -2.0])</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ar</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]]):</span>
<span class="n">ar_</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ar</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
<span class="n">ar_</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">frombuffer</span><span class="p">(</span><span class="n">ar</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ar</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
<span class="n">ar_</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">ar</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ar_</span> <span class="o">=</span> <span class="n">ar</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> <span class="k">if</span> <span class="n">ar</span><span class="o">.</span><span class="n">dtype</span> <span class="o">!=</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span> <span class="k">else</span> <span class="n">ar</span>
<span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">ar_</span>
<span class="k">def</span><span class="w"> </span><span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Type</span><span class="p">[</span><span class="s2">&quot;DenseVector&quot;</span><span class="p">],</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">bytes</span><span class="p">]]:</span>
<span class="k">return</span> <span class="n">DenseVector</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="o">.</span><span class="n">tobytes</span><span class="p">(),)</span>
<div class="viewcode-block" id="DenseVector.numNonzeros"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseVector.html#pyspark.ml.linalg.DenseVector.numNonzeros">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">numNonzeros</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Number of nonzero elements. This scans all active values and count non zeros</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">count_nonzero</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">)</span></div>
<div class="viewcode-block" id="DenseVector.norm"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseVector.html#pyspark.ml.linalg.DenseVector.norm">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">norm</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="s2">&quot;NormType&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Calculates the norm of a DenseVector.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; a = DenseVector([0, -1, 2, -3])</span>
<span class="sd"> &gt;&gt;&gt; a.norm(2)</span>
<span class="sd"> 3.7...</span>
<span class="sd"> &gt;&gt;&gt; a.norm(1)</span>
<span class="sd"> 6.0</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span></div>
<div class="viewcode-block" id="DenseVector.dot"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseVector.html#pyspark.ml.linalg.DenseVector.dot">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">dot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Compute the dot product of two Vectors. We support</span>
<span class="sd"> (Numpy array, list, SparseVector, or SciPy sparse)</span>
<span class="sd"> and a target NumPy array that is either 1- or 2-dimensional.</span>
<span class="sd"> Equivalent to calling numpy.dot of the two vectors.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; dense = DenseVector(array.array(&#39;d&#39;, [1., 2.]))</span>
<span class="sd"> &gt;&gt;&gt; dense.dot(dense)</span>
<span class="sd"> 5.0</span>
<span class="sd"> &gt;&gt;&gt; dense.dot(SparseVector(2, [0, 1], [2., 1.]))</span>
<span class="sd"> 4.0</span>
<span class="sd"> &gt;&gt;&gt; dense.dot(range(1, 3))</span>
<span class="sd"> 5.0</span>
<span class="sd"> &gt;&gt;&gt; dense.dot(np.array(range(1, 3)))</span>
<span class="sd"> 5.0</span>
<span class="sd"> &gt;&gt;&gt; dense.dot([1.,])</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &gt;&gt;&gt; dense.dot(np.reshape([1., 2., 3., 4.], (2, 2), order=&#39;F&#39;))</span>
<span class="sd"> array([ 5., 11.])</span>
<span class="sd"> &gt;&gt;&gt; dense.dot(np.reshape([1., 2., 3.], (3, 1), order=&#39;F&#39;))</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="o">==</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="k">if</span> <span class="n">other</span><span class="o">.</span><span class="n">ndim</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;dimension mismatch&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">_have_scipy</span> <span class="ow">and</span> <span class="n">scipy</span><span class="o">.</span><span class="n">sparse</span><span class="o">.</span><span class="n">issparse</span><span class="p">(</span><span class="n">other</span><span class="p">):</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">cast</span><span class="p">(</span><span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;dimension mismatch&quot;</span>
<span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="s2">&quot;spmatrix&quot;</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">())</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">_vector_size</span><span class="p">(</span><span class="n">other</span><span class="p">),</span> <span class="s2">&quot;dimension mismatch&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">SparseVector</span><span class="p">):</span>
<span class="k">return</span> <span class="n">other</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Vector</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">(),</span> <span class="n">other</span><span class="o">.</span><span class="n">toArray</span><span class="p">())</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">(),</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># type: ignore[call-overload]</span></div>
<div class="viewcode-block" id="DenseVector.squared_distance"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseVector.html#pyspark.ml.linalg.DenseVector.squared_distance">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">squared_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Squared distance of two Vectors.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; dense1 = DenseVector(array.array(&#39;d&#39;, [1., 2.]))</span>
<span class="sd"> &gt;&gt;&gt; dense1.squared_distance(dense1)</span>
<span class="sd"> 0.0</span>
<span class="sd"> &gt;&gt;&gt; dense2 = np.array([2., 1.])</span>
<span class="sd"> &gt;&gt;&gt; dense1.squared_distance(dense2)</span>
<span class="sd"> 2.0</span>
<span class="sd"> &gt;&gt;&gt; dense3 = [2., 1.]</span>
<span class="sd"> &gt;&gt;&gt; dense1.squared_distance(dense3)</span>
<span class="sd"> 2.0</span>
<span class="sd"> &gt;&gt;&gt; sparse1 = SparseVector(2, [0, 1], [2., 1.])</span>
<span class="sd"> &gt;&gt;&gt; dense1.squared_distance(sparse1)</span>
<span class="sd"> 2.0</span>
<span class="sd"> &gt;&gt;&gt; dense1.squared_distance([1.,])</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &gt;&gt;&gt; dense1.squared_distance(SparseVector(1, [0,], [1.,]))</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">_vector_size</span><span class="p">(</span><span class="n">other</span><span class="p">),</span> <span class="s2">&quot;dimension mismatch&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">SparseVector</span><span class="p">):</span>
<span class="k">return</span> <span class="n">other</span><span class="o">.</span><span class="n">squared_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">_have_scipy</span> <span class="ow">and</span> <span class="n">scipy</span><span class="o">.</span><span class="n">sparse</span><span class="o">.</span><span class="n">issparse</span><span class="p">(</span><span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="n">_convert_to_vector</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">squared_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># type: ignore[attr-defined]</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Vector</span><span class="p">):</span>
<span class="n">other</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">toArray</span><span class="p">()</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
<span class="n">other</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="n">diff</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">()</span> <span class="o">-</span> <span class="n">other</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">diff</span><span class="p">,</span> <span class="n">diff</span><span class="p">)</span></div>
<div class="viewcode-block" id="DenseVector.toArray"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseVector.html#pyspark.ml.linalg.DenseVector.toArray">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toArray</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the underlying numpy.ndarray</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span></div>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the underlying numpy.ndarray</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="o">...</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">:</span> <span class="nb">slice</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="o">...</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">slice</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">]:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">[</span><span class="n">item</span><span class="p">]</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;[&quot;</span> <span class="o">+</span> <span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;DenseVector([</span><span class="si">%s</span><span class="s2">])&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_format_float</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">))</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">DenseVector</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">array_equal</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">other</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">SparseVector</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="n">other</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">Vectors</span><span class="o">.</span><span class="n">_equals</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">))),</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span> <span class="o">==</span> <span class="n">other</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">+</span> <span class="n">size</span>
<span class="n">nnz</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size</span> <span class="ow">and</span> <span class="n">nnz</span> <span class="o">&lt;</span> <span class="mi">128</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">result</span> <span class="o">+</span> <span class="n">i</span>
<span class="n">bits</span> <span class="o">=</span> <span class="n">_double_to_long_bits</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="n">result</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">result</span> <span class="o">+</span> <span class="p">(</span><span class="n">bits</span> <span class="o">^</span> <span class="p">(</span><span class="n">bits</span> <span class="o">&gt;&gt;</span> <span class="mi">32</span><span class="p">))</span>
<span class="n">nnz</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;DenseVector&quot;</span><span class="p">:</span>
<span class="k">return</span> <span class="n">DenseVector</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_delegate</span><span class="p">(</span><span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Callable</span><span class="p">[[</span><span class="s2">&quot;DenseVector&quot;</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="s2">&quot;DenseVector&quot;</span><span class="p">]:</span> <span class="c1"># type: ignore[misc]</span>
<span class="k">def</span><span class="w"> </span><span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="s2">&quot;DenseVector&quot;</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;DenseVector&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">DenseVector</span><span class="p">):</span>
<span class="n">other</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">array</span>
<span class="k">return</span> <span class="n">DenseVector</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">array</span><span class="p">,</span> <span class="n">op</span><span class="p">)(</span><span class="n">other</span><span class="p">))</span>
<span class="k">return</span> <span class="n">func</span>
<span class="fm">__add__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__add__&quot;</span><span class="p">)</span>
<span class="fm">__sub__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__sub__&quot;</span><span class="p">)</span>
<span class="fm">__mul__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__mul__&quot;</span><span class="p">)</span>
<span class="n">__div__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__div__&quot;</span><span class="p">)</span>
<span class="fm">__truediv__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__truediv__&quot;</span><span class="p">)</span>
<span class="fm">__mod__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__mod__&quot;</span><span class="p">)</span>
<span class="fm">__radd__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__radd__&quot;</span><span class="p">)</span>
<span class="fm">__rsub__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__rsub__&quot;</span><span class="p">)</span>
<span class="fm">__rmul__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__rmul__&quot;</span><span class="p">)</span>
<span class="n">__rdiv__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__rdiv__&quot;</span><span class="p">)</span>
<span class="fm">__rtruediv__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__rtruediv__&quot;</span><span class="p">)</span>
<span class="fm">__rmod__</span> <span class="o">=</span> <span class="n">_delegate</span><span class="p">(</span><span class="s2">&quot;__rmod__&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="SparseVector"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseVector.html#pyspark.ml.linalg.SparseVector">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">SparseVector</span><span class="p">(</span><span class="n">Vector</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A simple sparse vector class for passing data to MLlib. Users may</span>
<span class="sd"> alternatively pass SciPy&#39;s {scipy.sparse} data types.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__indices</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">__values</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">):</span>
<span class="o">...</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]):</span>
<span class="o">...</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__indices</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">__values</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]):</span>
<span class="o">...</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__pairs</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]]):</span>
<span class="o">...</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__map</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]):</span>
<span class="o">...</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span>
<span class="nb">bytes</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">],</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="n">Iterable</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]],</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]</span>
<span class="p">],</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a sparse vector, using either a dictionary, a list of</span>
<span class="sd"> (index, value) pairs, or two separate arrays of indices and</span>
<span class="sd"> values (sorted by index).</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> size : int</span>
<span class="sd"> Size of the vector.</span>
<span class="sd"> args</span>
<span class="sd"> Active entries, as a dictionary {index: value, ...},</span>
<span class="sd"> a list of tuples [(index, value), ...], or a list of strictly</span>
<span class="sd"> increasing indices and a list of corresponding values [index, ...],</span>
<span class="sd"> [value, ...]. Inactive entries are treated as zeros.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; SparseVector(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> SparseVector(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> &gt;&gt;&gt; SparseVector(4, [(1, 1.0), (3, 5.5)])</span>
<span class="sd"> SparseVector(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> &gt;&gt;&gt; SparseVector(4, [1, 3], [1.0, 5.5])</span>
<span class="sd"> SparseVector(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> &gt;&gt;&gt; SparseVector(4, {1:1.0, 6:2.0})</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: Index 6 is out of the size of vector with size=4</span>
<span class="sd"> &gt;&gt;&gt; SparseVector(4, {-1:1.0})</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: Contains negative index -1</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot; Size of the vector. &quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="mi">1</span> <span class="o">&lt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;must pass either 2 or 3 arguments&quot;</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">pairs</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">pairs</span><span class="p">)</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
<span class="n">pairs</span> <span class="o">=</span> <span class="n">pairs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="n">pairs</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">Iterable</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]],</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">pairs</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pairs</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">int32</span><span class="p">)</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot; A list of indices corresponding to active entries. &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pairs</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot; A list of values corresponding to active entries. &quot;&quot;&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">bytes</span><span class="p">):</span>
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="nb">bytes</span><span class="p">),</span> <span class="s2">&quot;values should be string too&quot;</span>
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">frombuffer</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">int32</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">frombuffer</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># np.frombuffer() doesn&#39;t work well with empty string in older version</span>
<span class="bp">self</span><span class="o">.</span><span class="n">indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">int32</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">int32</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">),</span> <span class="s2">&quot;index and value arrays not same length&quot;</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
<span class="s2">&quot;Indices </span><span class="si">%s</span><span class="s2"> and </span><span class="si">%s</span><span class="s2"> are not strictly increasing&quot;</span>
<span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
<span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">size</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">assert</span> <span class="p">(</span>
<span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
<span class="p">),</span> <span class="s2">&quot;Index </span><span class="si">%d</span><span class="s2"> is out of the size of vector with size=</span><span class="si">%d</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span>
<span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">assert</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;Contains negative index </span><span class="si">%d</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">))</span>
<div class="viewcode-block" id="SparseVector.numNonzeros"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseVector.html#pyspark.ml.linalg.SparseVector.numNonzeros">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">numNonzeros</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Number of nonzero elements. This scans all active values and count non zeros.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">count_nonzero</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span></div>
<div class="viewcode-block" id="SparseVector.norm"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseVector.html#pyspark.ml.linalg.SparseVector.norm">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">norm</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="s2">&quot;NormType&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Calculates the norm of a SparseVector.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; a = SparseVector(4, [0, 1], [3., -4.])</span>
<span class="sd"> &gt;&gt;&gt; a.norm(1)</span>
<span class="sd"> 7.0</span>
<span class="sd"> &gt;&gt;&gt; a.norm(2)</span>
<span class="sd"> 5.0</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span></div>
<span class="k">def</span><span class="w"> </span><span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Type</span><span class="p">[</span><span class="s2">&quot;SparseVector&quot;</span><span class="p">],</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">]]:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">SparseVector</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">tobytes</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">tobytes</span><span class="p">()))</span>
<div class="viewcode-block" id="SparseVector.dot"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseVector.html#pyspark.ml.linalg.SparseVector.dot">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">dot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Dot product with a SparseVector or 1- or 2-dimensional Numpy array.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; a = SparseVector(4, [1, 3], [3.0, 4.0])</span>
<span class="sd"> &gt;&gt;&gt; a.dot(a)</span>
<span class="sd"> 25.0</span>
<span class="sd"> &gt;&gt;&gt; a.dot(array.array(&#39;d&#39;, [1., 2., 3., 4.]))</span>
<span class="sd"> 22.0</span>
<span class="sd"> &gt;&gt;&gt; b = SparseVector(4, [2], [1.0])</span>
<span class="sd"> &gt;&gt;&gt; a.dot(b)</span>
<span class="sd"> 0.0</span>
<span class="sd"> &gt;&gt;&gt; a.dot(np.array([[1, 1], [2, 2], [3, 3], [4, 4]]))</span>
<span class="sd"> array([ 22., 22.])</span>
<span class="sd"> &gt;&gt;&gt; a.dot([1., 2., 3.])</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &gt;&gt;&gt; a.dot(np.array([1., 2.]))</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &gt;&gt;&gt; a.dot(DenseVector([1., 2.]))</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &gt;&gt;&gt; a.dot(np.zeros((3, 2)))</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
<span class="k">if</span> <span class="n">other</span><span class="o">.</span><span class="n">ndim</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cannot call dot with </span><span class="si">%d</span><span class="s2">-dimensional array&quot;</span> <span class="o">%</span> <span class="n">other</span><span class="o">.</span><span class="n">ndim</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;dimension mismatch&quot;</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="n">other</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">])</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">_vector_size</span><span class="p">(</span><span class="n">other</span><span class="p">),</span> <span class="s2">&quot;dimension mismatch&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">DenseVector</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">array</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">SparseVector</span><span class="p">):</span>
<span class="c1"># Find out common indices.</span>
<span class="n">self_cmind</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">in1d</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="n">assume_unique</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">self_values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">self_cmind</span><span class="p">]</span>
<span class="k">if</span> <span class="n">self_values</span><span class="o">.</span><span class="n">size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="mf">0.0</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">other_cmind</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">in1d</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="n">assume_unique</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">self_values</span><span class="p">,</span> <span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">other_cmind</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">_convert_to_vector</span><span class="p">(</span><span class="n">other</span><span class="p">))</span> <span class="c1"># type: ignore[arg-type]</span></div>
<div class="viewcode-block" id="SparseVector.squared_distance"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseVector.html#pyspark.ml.linalg.SparseVector.squared_distance">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">squared_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Squared distance from a SparseVector or 1-dimensional NumPy array.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; a = SparseVector(4, [1, 3], [3.0, 4.0])</span>
<span class="sd"> &gt;&gt;&gt; a.squared_distance(a)</span>
<span class="sd"> 0.0</span>
<span class="sd"> &gt;&gt;&gt; a.squared_distance(array.array(&#39;d&#39;, [1., 2., 3., 4.]))</span>
<span class="sd"> 11.0</span>
<span class="sd"> &gt;&gt;&gt; a.squared_distance(np.array([1., 2., 3., 4.]))</span>
<span class="sd"> 11.0</span>
<span class="sd"> &gt;&gt;&gt; b = SparseVector(4, [2], [1.0])</span>
<span class="sd"> &gt;&gt;&gt; a.squared_distance(b)</span>
<span class="sd"> 26.0</span>
<span class="sd"> &gt;&gt;&gt; b.squared_distance(a)</span>
<span class="sd"> 26.0</span>
<span class="sd"> &gt;&gt;&gt; b.squared_distance([1., 2.])</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &gt;&gt;&gt; b.squared_distance(SparseVector(3, [1,], [1.0,]))</span>
<span class="sd"> Traceback (most recent call last):</span>
<span class="sd"> ...</span>
<span class="sd"> AssertionError: dimension mismatch</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">_vector_size</span><span class="p">(</span><span class="n">other</span><span class="p">),</span> <span class="s2">&quot;dimension mismatch&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">DenseVector</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">)</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">ndim</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Cannot call squared_distance with </span><span class="si">%d</span><span class="s2">-dimensional array&quot;</span> <span class="o">%</span> <span class="n">other</span><span class="o">.</span><span class="n">ndim</span>
<span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">DenseVector</span><span class="p">):</span>
<span class="n">other</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">array</span>
<span class="n">sparse_ind</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">bool</span><span class="p">)</span>
<span class="n">sparse_ind</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">dist</span> <span class="o">=</span> <span class="n">other</span><span class="p">[</span><span class="n">sparse_ind</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">dist</span><span class="p">,</span> <span class="n">dist</span><span class="p">)</span>
<span class="n">other_ind</span> <span class="o">=</span> <span class="n">other</span><span class="p">[</span><span class="o">~</span><span class="n">sparse_ind</span><span class="p">]</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">other_ind</span><span class="p">,</span> <span class="n">other_ind</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">SparseVector</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="mf">0.0</span>
<span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">)</span> <span class="ow">and</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">j</span><span class="p">]:</span>
<span class="n">diff</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">diff</span> <span class="o">*</span> <span class="n">diff</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">j</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">j</span><span class="p">]:</span>
<span class="n">result</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">*</span> <span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="n">j</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">):</span>
<span class="n">result</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">):</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">*</span> <span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="n">j</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">squared_distance</span><span class="p">(</span><span class="n">_convert_to_vector</span><span class="p">(</span><span class="n">other</span><span class="p">))</span> <span class="c1"># type: ignore[arg-type]</span></div>
<div class="viewcode-block" id="SparseVector.toArray"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseVector.html#pyspark.ml.linalg.SparseVector.toArray">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toArray</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a copy of this SparseVector as a 1-dimensional numpy.ndarray.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">arr</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="n">arr</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span>
<span class="k">return</span> <span class="n">arr</span></div>
<span class="k">def</span><span class="w"> </span><span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="n">inds</span> <span class="o">=</span> <span class="s2">&quot;[&quot;</span> <span class="o">+</span> <span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span>
<span class="n">vals</span> <span class="o">=</span> <span class="s2">&quot;[&quot;</span> <span class="o">+</span> <span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span>
<span class="k">return</span> <span class="s2">&quot;(&quot;</span> <span class="o">+</span> <span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">),</span> <span class="n">inds</span><span class="p">,</span> <span class="n">vals</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="n">inds</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span>
<span class="n">vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span>
<span class="n">entries</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="p">[</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2">: </span><span class="si">{1}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">inds</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">_format_float</span><span class="p">(</span><span class="n">vals</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">inds</span><span class="p">))]</span>
<span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;SparseVector(</span><span class="si">{0}</span><span class="s2">, {{</span><span class="si">{1}</span><span class="s2">}})&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="n">entries</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">SparseVector</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span>
<span class="n">other</span><span class="o">.</span><span class="n">size</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
<span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">array_equal</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">)</span>
<span class="ow">and</span> <span class="n">np</span><span class="o">.</span><span class="n">array_equal</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">DenseVector</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">Vectors</span><span class="o">.</span><span class="n">_equals</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="p">))),</span> <span class="n">other</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="n">inds</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indices</span>
<span class="n">vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;Indices must be of type integer, got type </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">index</span><span class="p">))</span>
<span class="k">if</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;Index </span><span class="si">%d</span><span class="s2"> out of bounds.&quot;</span> <span class="o">%</span> <span class="n">index</span><span class="p">)</span>
<span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">index</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
<span class="k">if</span> <span class="p">(</span><span class="n">inds</span><span class="o">.</span><span class="n">size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">index</span> <span class="o">&gt;</span> <span class="n">inds</span><span class="o">.</span><span class="n">item</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="mf">0.0</span><span class="p">)</span>
<span class="n">insert_index</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">searchsorted</span><span class="p">(</span><span class="n">inds</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
<span class="n">row_ind</span> <span class="o">=</span> <span class="n">inds</span><span class="p">[</span><span class="n">insert_index</span><span class="p">]</span>
<span class="k">if</span> <span class="n">row_ind</span> <span class="o">==</span> <span class="n">index</span><span class="p">:</span>
<span class="k">return</span> <span class="n">vals</span><span class="p">[</span><span class="n">insert_index</span><span class="p">]</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="mf">0.0</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
<span class="n">nnz</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span> <span class="ow">and</span> <span class="n">nnz</span> <span class="o">&lt;</span> <span class="mi">128</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">result</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indices</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="n">bits</span> <span class="o">=</span> <span class="n">_double_to_long_bits</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="n">result</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">result</span> <span class="o">+</span> <span class="p">(</span><span class="n">bits</span> <span class="o">^</span> <span class="p">(</span><span class="n">bits</span> <span class="o">&gt;&gt;</span> <span class="mi">32</span><span class="p">))</span>
<span class="n">nnz</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="Vectors"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vectors.html#pyspark.ml.linalg.Vectors">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">Vectors</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Factory methods for working with vectors.</span>
<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> Dense vectors are simply represented as NumPy array objects,</span>
<span class="sd"> so there is no need to convert them for use in MLlib. For sparse vectors,</span>
<span class="sd"> the factory methods in this class create an MLlib-compatible type, or users</span>
<span class="sd"> can pass in SciPy&#39;s `scipy.sparse` column vectors.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@staticmethod</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sparse</span><span class="p">(</span><span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__indices</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">__values</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparseVector</span><span class="p">:</span>
<span class="o">...</span>
<span class="nd">@staticmethod</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sparse</span><span class="p">(</span><span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">SparseVector</span><span class="p">:</span>
<span class="o">...</span>
<span class="nd">@staticmethod</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sparse</span><span class="p">(</span><span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__indices</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">__values</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">SparseVector</span><span class="p">:</span>
<span class="o">...</span>
<span class="nd">@staticmethod</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sparse</span><span class="p">(</span><span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__pairs</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">SparseVector</span><span class="p">:</span>
<span class="o">...</span>
<span class="nd">@staticmethod</span>
<span class="nd">@overload</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sparse</span><span class="p">(</span><span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">__map</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">SparseVector</span><span class="p">:</span>
<span class="o">...</span>
<div class="viewcode-block" id="Vectors.sparse"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vectors.html#pyspark.ml.linalg.Vectors.sparse">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sparse</span><span class="p">(</span>
<span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span>
<span class="nb">bytes</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">],</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="n">Iterable</span><span class="p">[</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]],</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]</span>
<span class="p">],</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparseVector</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a sparse vector, using either a dictionary, a list of</span>
<span class="sd"> (index, value) pairs, or two separate arrays of indices and</span>
<span class="sd"> values (sorted by index).</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> size : int</span>
<span class="sd"> Size of the vector.</span>
<span class="sd"> args</span>
<span class="sd"> Non-zero entries, as a dictionary, list of tuples,</span>
<span class="sd"> or two sorted lists containing indices and values.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; Vectors.sparse(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> SparseVector(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> &gt;&gt;&gt; Vectors.sparse(4, [(1, 1.0), (3, 5.5)])</span>
<span class="sd"> SparseVector(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> &gt;&gt;&gt; Vectors.sparse(4, [1, 3], [1.0, 5.5])</span>
<span class="sd"> SparseVector(4, {1: 1.0, 3: 5.5})</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">SparseVector</span><span class="p">(</span><span class="n">size</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span> <span class="c1"># type: ignore[arg-type]</span></div>
<span class="nd">@overload</span>
<span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">dense</span><span class="p">(</span><span class="o">*</span><span class="n">elements</span><span class="p">:</span> <span class="nb">float</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DenseVector</span><span class="p">:</span>
<span class="o">...</span>
<span class="nd">@overload</span>
<span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">dense</span><span class="p">(</span><span class="n">__arr</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DenseVector</span><span class="p">:</span>
<span class="o">...</span>
<span class="nd">@overload</span>
<span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">dense</span><span class="p">(</span><span class="n">__arr</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">DenseVector</span><span class="p">:</span>
<span class="o">...</span>
<div class="viewcode-block" id="Vectors.dense"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vectors.html#pyspark.ml.linalg.Vectors.dense">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">dense</span><span class="p">(</span><span class="o">*</span><span class="n">elements</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">DenseVector</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a dense vector of 64-bit floats from a Python list or numbers.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; Vectors.dense([1, 2, 3])</span>
<span class="sd"> DenseVector([1.0, 2.0, 3.0])</span>
<span class="sd"> &gt;&gt;&gt; Vectors.dense(1.0, 2.0)</span>
<span class="sd"> DenseVector([1.0, 2.0])</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">elements</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">elements</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="nb">int</span><span class="p">)):</span>
<span class="c1"># it&#39;s list, numpy.array or other iterable object.</span>
<span class="n">elements</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># type: ignore[assignment]</span>
<span class="k">return</span> <span class="n">DenseVector</span><span class="p">(</span><span class="n">cast</span><span class="p">(</span><span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="n">elements</span><span class="p">))</span></div>
<div class="viewcode-block" id="Vectors.squared_distance"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vectors.html#pyspark.ml.linalg.Vectors.squared_distance">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">squared_distance</span><span class="p">(</span><span class="n">v1</span><span class="p">:</span> <span class="n">Vector</span><span class="p">,</span> <span class="n">v2</span><span class="p">:</span> <span class="n">Vector</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Squared distance between two vectors.</span>
<span class="sd"> a and b can be of type SparseVector, DenseVector, np.ndarray</span>
<span class="sd"> or array.array.</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; a = Vectors.sparse(4, [(0, 1), (3, 4)])</span>
<span class="sd"> &gt;&gt;&gt; b = Vectors.dense([2, 5, 4, 1])</span>
<span class="sd"> &gt;&gt;&gt; a.squared_distance(b)</span>
<span class="sd"> 51.0</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">v1</span><span class="p">,</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">_convert_to_vector</span><span class="p">(</span><span class="n">v1</span><span class="p">),</span> <span class="n">_convert_to_vector</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">v1</span><span class="o">.</span><span class="n">squared_distance</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span> <span class="c1"># type: ignore[attr-defined]</span></div>
<div class="viewcode-block" id="Vectors.norm"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vectors.html#pyspark.ml.linalg.Vectors.norm">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">norm</span><span class="p">(</span><span class="n">vector</span><span class="p">:</span> <span class="n">Vector</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="s2">&quot;NormType&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Find norm of the given vector.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">_convert_to_vector</span><span class="p">(</span><span class="n">vector</span><span class="p">)</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="c1"># type: ignore[attr-defined]</span></div>
<div class="viewcode-block" id="Vectors.zeros"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Vectors.html#pyspark.ml.linalg.Vectors.zeros">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">zeros</span><span class="p">(</span><span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DenseVector</span><span class="p">:</span>
<span class="k">return</span> <span class="n">DenseVector</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span><span class="p">))</span></div>
<span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_equals</span><span class="p">(</span>
<span class="n">v1_indices</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">],</span>
<span class="n">v1_values</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">],</span>
<span class="n">v2_indices</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">],</span>
<span class="n">v2_values</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">],</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Check equality between sparse/dense vectors,</span>
<span class="sd"> v1_indices and v2_indices assume to be strictly increasing.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">v1_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">v1_values</span><span class="p">)</span>
<span class="n">v2_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">v2_values</span><span class="p">)</span>
<span class="n">k1</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">k2</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">all_equal</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">while</span> <span class="n">all_equal</span><span class="p">:</span>
<span class="k">while</span> <span class="n">k1</span> <span class="o">&lt;</span> <span class="n">v1_size</span> <span class="ow">and</span> <span class="n">v1_values</span><span class="p">[</span><span class="n">k1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">k1</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="n">k2</span> <span class="o">&lt;</span> <span class="n">v2_size</span> <span class="ow">and</span> <span class="n">v2_values</span><span class="p">[</span><span class="n">k2</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">k2</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">k1</span> <span class="o">&gt;=</span> <span class="n">v1_size</span> <span class="ow">or</span> <span class="n">k2</span> <span class="o">&gt;=</span> <span class="n">v2_size</span><span class="p">:</span>
<span class="k">return</span> <span class="n">k1</span> <span class="o">&gt;=</span> <span class="n">v1_size</span> <span class="ow">and</span> <span class="n">k2</span> <span class="o">&gt;=</span> <span class="n">v2_size</span>
<span class="n">all_equal</span> <span class="o">=</span> <span class="n">v1_indices</span><span class="p">[</span><span class="n">k1</span><span class="p">]</span> <span class="o">==</span> <span class="n">v2_indices</span><span class="p">[</span><span class="n">k2</span><span class="p">]</span> <span class="ow">and</span> <span class="n">v1_values</span><span class="p">[</span><span class="n">k1</span><span class="p">]</span> <span class="o">==</span> <span class="n">v2_values</span><span class="p">[</span><span class="n">k2</span><span class="p">]</span>
<span class="n">k1</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">k2</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">all_equal</span></div>
<div class="viewcode-block" id="Matrix"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Matrix.html#pyspark.ml.linalg.Matrix">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">Matrix</span><span class="p">:</span>
<span class="n">__UDT__</span> <span class="o">=</span> <span class="n">MatrixUDT</span><span class="p">()</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Represents a local matrix.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numRows</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">numCols</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">isTransposed</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numRows</span> <span class="o">=</span> <span class="n">numRows</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numCols</span> <span class="o">=</span> <span class="n">numCols</span>
<span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span> <span class="o">=</span> <span class="n">isTransposed</span>
<div class="viewcode-block" id="Matrix.toArray"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Matrix.html#pyspark.ml.linalg.Matrix.toArray">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toArray</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns its elements in a numpy.ndarray.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_convert_to_array</span><span class="p">(</span><span class="n">array_like</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]],</span> <span class="n">dtype</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert Matrix attributes which are array-like or buffer to array.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">array_like</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">frombuffer</span><span class="p">(</span><span class="n">array_like</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">dtype</span><span class="p">)</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">array_like</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">dtype</span><span class="p">)</span></div>
<div class="viewcode-block" id="DenseMatrix"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseMatrix.html#pyspark.ml.linalg.DenseMatrix">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">DenseMatrix</span><span class="p">(</span><span class="n">Matrix</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Column-major dense matrix.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">numRows</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">numCols</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">values</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]],</span>
<span class="n">isTransposed</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="p">):</span>
<span class="n">Matrix</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numRows</span><span class="p">,</span> <span class="n">numCols</span><span class="p">,</span> <span class="n">isTransposed</span><span class="p">)</span>
<span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_array</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="o">==</span> <span class="n">numRows</span> <span class="o">*</span> <span class="n">numCols</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span> <span class="o">=</span> <span class="n">values</span>
<span class="k">def</span><span class="w"> </span><span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Type</span><span class="p">[</span><span class="s2">&quot;DenseMatrix&quot;</span><span class="p">],</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]:</span>
<span class="k">return</span> <span class="n">DenseMatrix</span><span class="p">,</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">tobytes</span><span class="p">(),</span>
<span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Pretty printing of a DenseMatrix</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; dm = DenseMatrix(2, 2, range(4))</span>
<span class="sd"> &gt;&gt;&gt; print(dm)</span>
<span class="sd"> DenseMatrix([[ 0., 2.],</span>
<span class="sd"> [ 1., 3.]])</span>
<span class="sd"> &gt;&gt;&gt; dm = DenseMatrix(2, 2, range(4), isTransposed=True)</span>
<span class="sd"> &gt;&gt;&gt; print(dm)</span>
<span class="sd"> DenseMatrix([[ 0., 1.],</span>
<span class="sd"> [ 2., 3.]])</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Inspired by __repr__ in scipy matrices.</span>
<span class="n">array_lines</span> <span class="o">=</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">())</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="c1"># We need to adjust six spaces which is the difference in number</span>
<span class="c1"># of letters between &quot;DenseMatrix&quot; and &quot;array&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([(</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="mi">6</span> <span class="o">+</span> <span class="n">line</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">array_lines</span><span class="p">[</span><span class="mi">1</span><span class="p">:]])</span>
<span class="k">return</span> <span class="n">array_lines</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">,</span> <span class="s2">&quot;DenseMatrix&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">x</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Representation of a DenseMatrix</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; dm = DenseMatrix(2, 2, range(4))</span>
<span class="sd"> &gt;&gt;&gt; dm</span>
<span class="sd"> DenseMatrix(2, 2, [0.0, 1.0, 2.0, 3.0], False)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># If the number of values are less than seventeen then return as it is.</span>
<span class="c1"># Else return first eight values and last eight values.</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">17</span><span class="p">:</span>
<span class="n">entries</span> <span class="o">=</span> <span class="n">_format_float_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">entries</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">_format_float_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[:</span><span class="mi">8</span><span class="p">])</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;...&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">_format_float_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="o">-</span><span class="mi">8</span><span class="p">:])</span>
<span class="p">)</span>
<span class="n">entries</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">entries</span><span class="p">)</span> <span class="c1"># type: ignore[assignment]</span>
<span class="k">return</span> <span class="s2">&quot;DenseMatrix(</span><span class="si">{0}</span><span class="s2">, </span><span class="si">{1}</span><span class="s2">, [</span><span class="si">{2}</span><span class="s2">], </span><span class="si">{3}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span>
<span class="p">)</span>
<div class="viewcode-block" id="DenseMatrix.toArray"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseMatrix.html#pyspark.ml.linalg.DenseMatrix.toArray">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toArray</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Return a :py:class:`numpy.ndarray`</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; m = DenseMatrix(2, 2, range(4))</span>
<span class="sd"> &gt;&gt;&gt; m.toArray()</span>
<span class="sd"> array([[ 0., 2.],</span>
<span class="sd"> [ 1., 3.]])</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asfortranarray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">reshape</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">)))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">reshape</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">),</span> <span class="n">order</span><span class="o">=</span><span class="s2">&quot;F&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="DenseMatrix.toSparse"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.DenseMatrix.html#pyspark.ml.linalg.DenseMatrix.toSparse">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toSparse</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;SparseMatrix&quot;</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert to SparseMatrix&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="n">values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ravel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">(),</span> <span class="n">order</span><span class="o">=</span><span class="s2">&quot;F&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span>
<span class="n">indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">values</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">colCounts</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">bincount</span><span class="p">(</span><span class="n">indices</span> <span class="o">//</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">)</span>
<span class="n">colPtrs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">cumsum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="n">colCounts</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">numCols</span> <span class="o">-</span> <span class="n">colCounts</span><span class="o">.</span><span class="n">size</span><span class="p">))))</span>
<span class="n">values</span> <span class="o">=</span> <span class="n">values</span><span class="p">[</span><span class="n">indices</span><span class="p">]</span>
<span class="n">rowIndices</span> <span class="o">=</span> <span class="n">indices</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span>
<span class="k">return</span> <span class="n">SparseMatrix</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span> <span class="n">colPtrs</span><span class="p">,</span> <span class="n">rowIndices</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span></div>
<span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indices</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="n">indices</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;Row index </span><span class="si">%d</span><span class="s2"> is out of range [0, </span><span class="si">%d</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">))</span>
<span class="k">if</span> <span class="n">j</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span> <span class="ow">or</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;Column index </span><span class="si">%d</span><span class="s2"> is out of range [0, </span><span class="si">%d</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">))</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span> <span class="o">+</span> <span class="n">j</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">j</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">]</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span> <span class="o">!=</span> <span class="n">other</span><span class="o">.</span><span class="n">numRows</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span> <span class="o">!=</span> <span class="n">other</span><span class="o">.</span><span class="n">numCols</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">SparseMatrix</span><span class="p">):</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">()</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">toArray</span><span class="p">())</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">self_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ravel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">(),</span> <span class="n">order</span><span class="o">=</span><span class="s2">&quot;F&quot;</span><span class="p">)</span>
<span class="n">other_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ravel</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">toArray</span><span class="p">(),</span> <span class="n">order</span><span class="o">=</span><span class="s2">&quot;F&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">self_values</span> <span class="o">==</span> <span class="n">other_values</span><span class="p">)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span></div>
<div class="viewcode-block" id="SparseMatrix"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseMatrix.html#pyspark.ml.linalg.SparseMatrix">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">SparseMatrix</span><span class="p">(</span><span class="n">Matrix</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Sparse Matrix stored in CSC format.&quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">numRows</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">numCols</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">colPtrs</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span>
<span class="n">rowIndices</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span>
<span class="n">values</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]],</span>
<span class="n">isTransposed</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="p">):</span>
<span class="n">Matrix</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numRows</span><span class="p">,</span> <span class="n">numCols</span><span class="p">,</span> <span class="n">isTransposed</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_array</span><span class="p">(</span><span class="n">colPtrs</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">int32</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_array</span><span class="p">(</span><span class="n">rowIndices</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">int32</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_array</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="o">.</span><span class="n">size</span> <span class="o">!=</span> <span class="n">numRows</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Expected colPtrs of size </span><span class="si">%d</span><span class="s2">, got </span><span class="si">%d</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">numRows</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="o">.</span><span class="n">size</span> <span class="o">!=</span> <span class="n">numCols</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Expected colPtrs of size </span><span class="si">%d</span><span class="s2">, got </span><span class="si">%d</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">numCols</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="o">.</span><span class="n">size</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Expected rowIndices of length </span><span class="si">%d</span><span class="s2">, got </span><span class="si">%d</span><span class="s2">.&quot;</span>
<span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Pretty printing of a SparseMatrix</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; sm1 = SparseMatrix(2, 2, [0, 2, 3], [0, 1, 1], [2, 3, 4])</span>
<span class="sd"> &gt;&gt;&gt; print(sm1)</span>
<span class="sd"> 2 X 2 CSCMatrix</span>
<span class="sd"> (0,0) 2.0</span>
<span class="sd"> (1,0) 3.0</span>
<span class="sd"> (1,1) 4.0</span>
<span class="sd"> &gt;&gt;&gt; sm1 = SparseMatrix(2, 2, [0, 2, 3], [0, 1, 1], [2, 3, 4], True)</span>
<span class="sd"> &gt;&gt;&gt; print(sm1)</span>
<span class="sd"> 2 X 2 CSRMatrix</span>
<span class="sd"> (0,0) 2.0</span>
<span class="sd"> (0,1) 3.0</span>
<span class="sd"> (1,1) 4.0</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">spstr</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> X </span><span class="si">{1}</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="n">spstr</span> <span class="o">+=</span> <span class="s2">&quot;CSRMatrix</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">spstr</span> <span class="o">+=</span> <span class="s2">&quot;CSCMatrix</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="n">cur_col</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">smlist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># Display first 16 values.</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">16</span><span class="p">:</span>
<span class="n">zipindval</span> <span class="o">=</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">zipindval</span> <span class="o">=</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">[:</span><span class="mi">16</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[:</span><span class="mi">16</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">rowInd</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">zipindval</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">[</span><span class="n">cur_col</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="n">i</span><span class="p">:</span>
<span class="n">cur_col</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="n">smlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;(</span><span class="si">{0}</span><span class="s2">,</span><span class="si">{1}</span><span class="s2">) </span><span class="si">{2}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cur_col</span><span class="p">,</span> <span class="n">rowInd</span><span class="p">,</span> <span class="n">_format_float</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">smlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;(</span><span class="si">{0}</span><span class="s2">,</span><span class="si">{1}</span><span class="s2">) </span><span class="si">{2}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">rowInd</span><span class="p">,</span> <span class="n">cur_col</span><span class="p">,</span> <span class="n">_format_float</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
<span class="n">spstr</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">smlist</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">16</span><span class="p">:</span>
<span class="n">spstr</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">..&quot;</span> <span class="o">*</span> <span class="mi">2</span>
<span class="k">return</span> <span class="n">spstr</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Representation of a SparseMatrix</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; sm1 = SparseMatrix(2, 2, [0, 2, 3], [0, 1, 1], [2, 3, 4])</span>
<span class="sd"> &gt;&gt;&gt; sm1</span>
<span class="sd"> SparseMatrix(2, 2, [0, 2, 3], [0, 1, 1], [2.0, 3.0, 4.0], False)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rowIndices</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">)</span>
<span class="n">colPtrs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">16</span><span class="p">:</span>
<span class="n">values</span> <span class="o">=</span> <span class="n">_format_float_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">_format_float_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[:</span><span class="mi">8</span><span class="p">])</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;...&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">_format_float_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="o">-</span><span class="mi">8</span><span class="p">:])</span>
<span class="p">)</span>
<span class="n">rowIndices</span> <span class="o">=</span> <span class="n">rowIndices</span><span class="p">[:</span><span class="mi">8</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;...&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">rowIndices</span><span class="p">[</span><span class="o">-</span><span class="mi">8</span><span class="p">:]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">16</span><span class="p">:</span>
<span class="n">colPtrs</span> <span class="o">=</span> <span class="n">colPtrs</span><span class="p">[:</span><span class="mi">8</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;...&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">colPtrs</span><span class="p">[</span><span class="o">-</span><span class="mi">8</span><span class="p">:]</span>
<span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="c1"># type: ignore[assignment]</span>
<span class="n">rowIndices</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">ind</span><span class="p">)</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">rowIndices</span><span class="p">])</span> <span class="c1"># type: ignore[assignment]</span>
<span class="n">colPtrs</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">ptr</span><span class="p">)</span> <span class="k">for</span> <span class="n">ptr</span> <span class="ow">in</span> <span class="n">colPtrs</span><span class="p">])</span> <span class="c1"># type: ignore[assignment]</span>
<span class="k">return</span> <span class="s2">&quot;SparseMatrix(</span><span class="si">{0}</span><span class="s2">, </span><span class="si">{1}</span><span class="s2">, [</span><span class="si">{2}</span><span class="s2">], [</span><span class="si">{3}</span><span class="s2">], [</span><span class="si">{4}</span><span class="s2">], </span><span class="si">{5}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span> <span class="n">colPtrs</span><span class="p">,</span> <span class="n">rowIndices</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span>
<span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Type</span><span class="p">[</span><span class="s2">&quot;SparseMatrix&quot;</span><span class="p">],</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]:</span>
<span class="k">return</span> <span class="n">SparseMatrix</span><span class="p">,</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="o">.</span><span class="n">tobytes</span><span class="p">(),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="o">.</span><span class="n">tobytes</span><span class="p">(),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">tobytes</span><span class="p">(),</span>
<span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indices</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">:</span>
<span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="n">indices</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;Row index </span><span class="si">%d</span><span class="s2"> is out of range [0, </span><span class="si">%d</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">))</span>
<span class="k">if</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">j</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;Column index </span><span class="si">%d</span><span class="s2"> is out of range [0, </span><span class="si">%d</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">))</span>
<span class="c1"># If a CSR matrix is given, then the row index should be searched</span>
<span class="c1"># for in ColPtrs, and the column index should be searched for in the</span>
<span class="c1"># corresponding slice obtained from rowIndices.</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="n">j</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span>
<span class="n">colStart</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="n">colEnd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">nz</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">[</span><span class="n">colStart</span><span class="p">:</span><span class="n">colEnd</span><span class="p">]</span>
<span class="n">ind</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">searchsorted</span><span class="p">(</span><span class="n">nz</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="n">colStart</span>
<span class="k">if</span> <span class="n">ind</span> <span class="o">&lt;</span> <span class="n">colEnd</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">==</span> <span class="n">i</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="mf">0.0</span><span class="p">)</span>
<div class="viewcode-block" id="SparseMatrix.toArray"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseMatrix.html#pyspark.ml.linalg.SparseMatrix.toArray">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toArray</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Return a numpy.ndarray</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="s2">&quot;F&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">startptr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
<span class="n">endptr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colPtrs</span><span class="p">[</span><span class="n">k</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isTransposed</span><span class="p">:</span>
<span class="n">A</span><span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">[</span><span class="n">startptr</span><span class="p">:</span><span class="n">endptr</span><span class="p">]]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">startptr</span><span class="p">:</span><span class="n">endptr</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">A</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">rowIndices</span><span class="p">[</span><span class="n">startptr</span><span class="p">:</span><span class="n">endptr</span><span class="p">],</span> <span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">startptr</span><span class="p">:</span><span class="n">endptr</span><span class="p">]</span>
<span class="k">return</span> <span class="n">A</span></div>
<div class="viewcode-block" id="SparseMatrix.toDense"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.SparseMatrix.html#pyspark.ml.linalg.SparseMatrix.toDense">[docs]</a> <span class="k">def</span><span class="w"> </span><span class="nf">toDense</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;DenseMatrix&quot;</span><span class="p">:</span>
<span class="n">densevals</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ravel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">(),</span> <span class="n">order</span><span class="o">=</span><span class="s2">&quot;F&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">DenseMatrix</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">numRows</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numCols</span><span class="p">,</span> <span class="n">densevals</span><span class="p">)</span></div>
<span class="c1"># TODO: More efficient implementation:</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toArray</span><span class="p">()</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">toArray</span><span class="p">())</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span></div>
<div class="viewcode-block" id="Matrices"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Matrices.html#pyspark.ml.linalg.Matrices">[docs]</a><span class="k">class</span><span class="w"> </span><span class="nc">Matrices</span><span class="p">:</span>
<div class="viewcode-block" id="Matrices.dense"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Matrices.html#pyspark.ml.linalg.Matrices.dense">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">dense</span><span class="p">(</span><span class="n">numRows</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">numCols</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">values</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">DenseMatrix</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a DenseMatrix</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">DenseMatrix</span><span class="p">(</span><span class="n">numRows</span><span class="p">,</span> <span class="n">numCols</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span></div>
<div class="viewcode-block" id="Matrices.sparse"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.linalg.Matrices.html#pyspark.ml.linalg.Matrices.sparse">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sparse</span><span class="p">(</span>
<span class="n">numRows</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">numCols</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">colPtrs</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span>
<span class="n">rowIndices</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span>
<span class="n">values</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">float</span><span class="p">]],</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">SparseMatrix</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a SparseMatrix</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">SparseMatrix</span><span class="p">(</span><span class="n">numRows</span><span class="p">,</span> <span class="n">numCols</span><span class="p">,</span> <span class="n">colPtrs</span><span class="p">,</span> <span class="n">rowIndices</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span></div></div>
<span class="k">def</span><span class="w"> </span><span class="nf">_test</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">doctest</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># Numpy 1.14+ changed it&#39;s string format.</span>
<span class="n">np</span><span class="o">.</span><span class="n">set_printoptions</span><span class="p">(</span><span class="n">legacy</span><span class="o">=</span><span class="s2">&quot;1.13&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="p">(</span><span class="n">failure_count</span><span class="p">,</span> <span class="n">test_count</span><span class="p">)</span> <span class="o">=</span> <span class="n">doctest</span><span class="o">.</span><span class="n">testmod</span><span class="p">(</span><span class="n">optionflags</span><span class="o">=</span><span class="n">doctest</span><span class="o">.</span><span class="n">ELLIPSIS</span><span class="p">)</span>
<span class="k">if</span> <span class="n">failure_count</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
<span class="n">_test</span><span class="p">()</span>
</pre></div>
</div>
<!-- Previous / next buttons -->
<div class='prev-next-area'>
</div>
</main>
</div>
</div>
<script src="../../../_static/scripts/pydata-sphinx-theme.js?digest=1999514e3f237ded88cf"></script>
<footer class="footer mt-5 mt-md-0">
<div class="container">
<div class="footer-item">
<p class="copyright">
&copy; Copyright .<br>
</p>
</div>
<div class="footer-item">
<p class="sphinx-version">
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.4.<br>
</p>
</div>
</div>
</footer>
</body>
</html>