|
14 | 14 | </script>
|
15 | 15 |
|
16 | 16 | <meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
17 |
| - <title>dpnp.dpnp_iface_functional — Data Parallel Extension for NumPy 0.17.0dev2+1.g264c6d8a772 documentation</title> |
| 17 | + <title>dpnp.dpnp_iface_functional — Data Parallel Extension for NumPy 0.17.0dev2+2.g2987585c848 documentation</title> |
18 | 18 | <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
|
19 | 19 | <link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
|
20 | 20 |
|
21 | 21 |
|
22 | 22 | <script src="../../_static/jquery.js?v=5d32c60e"></script>
|
23 | 23 | <script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
24 |
| - <script src="../../_static/documentation_options.js?v=15ab0fe7"></script> |
| 24 | + <script src="../../_static/documentation_options.js?v=adfc414f"></script> |
25 | 25 | <script src="../../_static/doctools.js?v=9bcbadda"></script>
|
26 | 26 | <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
27 | 27 | <script src="../../_static/js/theme.js"></script>
|
@@ -123,11 +123,14 @@ <h1>Source code for dpnp.dpnp_iface_functional</h1><div class="highlight"><pre>
|
123 | 123 |
|
124 | 124 |
|
125 | 125 | <span class="kn">import</span> <span class="nn">numpy</span>
|
126 |
| -<span class="kn">from</span> <span class="nn">dpctl.tensor._numpy_helper</span> <span class="kn">import</span> <span class="n">normalize_axis_index</span> |
| 126 | +<span class="kn">from</span> <span class="nn">dpctl.tensor._numpy_helper</span> <span class="kn">import</span> <span class="p">(</span> |
| 127 | + <span class="n">normalize_axis_index</span><span class="p">,</span> |
| 128 | + <span class="n">normalize_axis_tuple</span><span class="p">,</span> |
| 129 | +<span class="p">)</span> |
127 | 130 |
|
128 | 131 | <span class="kn">import</span> <span class="nn">dpnp</span>
|
129 | 132 |
|
130 |
| -<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"apply_along_axis"</span><span class="p">]</span> |
| 133 | +<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"apply_along_axis"</span><span class="p">,</span> <span class="s2">"apply_over_axes"</span><span class="p">]</span> |
131 | 134 |
|
132 | 135 |
|
133 | 136 | <div class="viewcode-block" id="apply_along_axis">
|
@@ -273,6 +276,89 @@ <h1>Source code for dpnp.dpnp_iface_functional</h1><div class="highlight"><pre>
|
273 | 276 |
|
274 | 277 | <span class="k">return</span> <span class="n">buff</span></div>
|
275 | 278 |
|
| 279 | + |
| 280 | + |
| 281 | +<div class="viewcode-block" id="apply_over_axes"> |
| 282 | +<a class="viewcode-back" href="../../reference/generated/dpnp.apply_over_axes.html#dpnp.apply_over_axes">[docs]</a> |
| 283 | +<span class="k">def</span> <span class="nf">apply_over_axes</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">axes</span><span class="p">):</span> |
| 284 | +<span class="w"> </span><span class="sd">"""</span> |
| 285 | +<span class="sd"> Apply a function repeatedly over multiple axes.</span> |
| 286 | + |
| 287 | +<span class="sd"> `func` is called as ``res = func(a, axis)``, where `axis` is the first</span> |
| 288 | +<span class="sd"> element of `axes`. The result `res` of the function call must have</span> |
| 289 | +<span class="sd"> either the same dimensions as `a` or one less dimension. If `res`</span> |
| 290 | +<span class="sd"> has one less dimension than `a`, a dimension is inserted before</span> |
| 291 | +<span class="sd"> `axis`. The call to `func` is then repeated for each axis in `axes`,</span> |
| 292 | +<span class="sd"> with `res` as the first argument.</span> |
| 293 | + |
| 294 | +<span class="sd"> For full documentation refer to :obj:`numpy.apply_over_axes`.</span> |
| 295 | + |
| 296 | +<span class="sd"> Parameters</span> |
| 297 | +<span class="sd"> ----------</span> |
| 298 | +<span class="sd"> func : function</span> |
| 299 | +<span class="sd"> This function must take two arguments, ``func(a, axis)``.</span> |
| 300 | +<span class="sd"> a : {dpnp.ndarray, usm_ndarray}</span> |
| 301 | +<span class="sd"> Input array.</span> |
| 302 | +<span class="sd"> axes : {int, sequence of ints}</span> |
| 303 | +<span class="sd"> Axes over which `func` is applied.</span> |
| 304 | + |
| 305 | +<span class="sd"> Returns</span> |
| 306 | +<span class="sd"> -------</span> |
| 307 | +<span class="sd"> out : dpnp.ndarray</span> |
| 308 | +<span class="sd"> The output array. The number of dimensions is the same as `a`,</span> |
| 309 | +<span class="sd"> but the shape can be different. This depends on whether `func`</span> |
| 310 | +<span class="sd"> changes the shape of its output with respect to its input.</span> |
| 311 | + |
| 312 | +<span class="sd"> See Also</span> |
| 313 | +<span class="sd"> --------</span> |
| 314 | +<span class="sd"> :obj:`dpnp.apply_along_axis` : Apply a function to 1-D slices of an array</span> |
| 315 | +<span class="sd"> along the given axis.</span> |
| 316 | + |
| 317 | +<span class="sd"> Examples</span> |
| 318 | +<span class="sd"> --------</span> |
| 319 | +<span class="sd"> >>> import dpnp as np</span> |
| 320 | +<span class="sd"> >>> a = np.arange(24).reshape(2, 3, 4)</span> |
| 321 | +<span class="sd"> >>> a</span> |
| 322 | +<span class="sd"> array([[[ 0, 1, 2, 3],</span> |
| 323 | +<span class="sd"> [ 4, 5, 6, 7],</span> |
| 324 | +<span class="sd"> [ 8, 9, 10, 11]],</span> |
| 325 | +<span class="sd"> [[12, 13, 14, 15],</span> |
| 326 | +<span class="sd"> [16, 17, 18, 19],</span> |
| 327 | +<span class="sd"> [20, 21, 22, 23]]])</span> |
| 328 | + |
| 329 | +<span class="sd"> Sum over axes 0 and 2. The result has same number of dimensions</span> |
| 330 | +<span class="sd"> as the original array:</span> |
| 331 | + |
| 332 | +<span class="sd"> >>> np.apply_over_axes(np.sum, a, [0, 2])</span> |
| 333 | +<span class="sd"> array([[[ 60],</span> |
| 334 | +<span class="sd"> [ 92],</span> |
| 335 | +<span class="sd"> [124]]])</span> |
| 336 | + |
| 337 | +<span class="sd"> Tuple axis arguments to ufuncs are equivalent:</span> |
| 338 | + |
| 339 | +<span class="sd"> >>> np.sum(a, axis=(0, 2), keepdims=True)</span> |
| 340 | +<span class="sd"> array([[[ 60],</span> |
| 341 | +<span class="sd"> [ 92],</span> |
| 342 | +<span class="sd"> [124]]])</span> |
| 343 | + |
| 344 | +<span class="sd"> """</span> |
| 345 | + |
| 346 | + <span class="n">dpnp</span><span class="o">.</span><span class="n">check_supported_arrays_type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> |
| 347 | + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">axes</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span> |
| 348 | + <span class="n">axes</span> <span class="o">=</span> <span class="p">(</span><span class="n">axes</span><span class="p">,)</span> |
| 349 | + <span class="n">axes</span> <span class="o">=</span> <span class="n">normalize_axis_tuple</span><span class="p">(</span><span class="n">axes</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">ndim</span><span class="p">)</span> |
| 350 | + |
| 351 | + <span class="k">for</span> <span class="n">axis</span> <span class="ow">in</span> <span class="n">axes</span><span class="p">:</span> |
| 352 | + <span class="n">res</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">axis</span><span class="p">)</span> |
| 353 | + <span class="k">if</span> <span class="n">res</span><span class="o">.</span><span class="n">ndim</span> <span class="o">!=</span> <span class="n">a</span><span class="o">.</span><span class="n">ndim</span><span class="p">:</span> |
| 354 | + <span class="n">res</span> <span class="o">=</span> <span class="n">dpnp</span><span class="o">.</span><span class="n">expand_dims</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">axis</span><span class="p">)</span> |
| 355 | + <span class="k">if</span> <span class="n">res</span><span class="o">.</span><span class="n">ndim</span> <span class="o">!=</span> <span class="n">a</span><span class="o">.</span><span class="n">ndim</span><span class="p">:</span> |
| 356 | + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> |
| 357 | + <span class="s2">"function is not returning an array of the correct shape"</span> |
| 358 | + <span class="p">)</span> |
| 359 | + <span class="n">a</span> <span class="o">=</span> <span class="n">res</span> |
| 360 | + <span class="k">return</span> <span class="n">res</span></div> |
| 361 | + |
276 | 362 | </pre></div>
|
277 | 363 |
|
278 | 364 | </div>
|
|
0 commit comments