Source code for numpoly.array_function.dstack

"""Stack arrays in sequence depth wise (along third axis)."""
from __future__ import annotations
from typing import Sequence
import numpy
import numpoly

from ..baseclass import ndpoly, PolyLike
from ..dispatch import implements


[docs]@implements(numpy.dstack) def dstack(tup: Sequence[PolyLike]) -> ndpoly: """ Stack arrays in sequence depth wise (along third axis). This is equivalent to concatenation along the third axis after 2-D arrays of shape `(M,N)` have been reshaped to `(M,N,1)` and 1-D arrays of shape `(N,)` have been reshaped to `(1,N,1)`. Rebuilds arrays divided by `dsplit`. This function makes most sense for arrays with up to 3 dimensions. For instance, for pixel-data with a height (first axis), width (second axis), and r/g/b channels (third axis). The functions `concatenate`, `stack` and `block` provide more general stacking and concatenation operations. Args: tup: The arrays must have the same shape along all but the third axis. 1-D or 2-D arrays must have the same shape. Return: The array formed by stacking the given arrays, will be at least 3-D. Example: >>> poly1 = numpoly.variable(3) >>> const1 = numpoly.polynomial([1, 2, 3]) >>> numpoly.dstack([poly1, const1]) polynomial([[[q0, 1], [q1, 2], [q2, 3]]]) >>> const2 = numpoly.polynomial([[1], [2], [3]]) >>> poly2 = poly1.reshape(3, 1) >>> numpoly.dstack([const2, poly2]) polynomial([[[1, q0]], <BLANKLINE> [[2, q1]], <BLANKLINE> [[3, q2]]]) """ arrays = numpoly.align_exponents(*tup) coefficients = [ numpy.dstack([array.values[key] for array in arrays]) for key in arrays[0].keys ] return numpoly.polynomial_from_attributes( exponents=arrays[0].exponents, coefficients=coefficients, names=arrays[0].names, dtype=coefficients[0].dtype, )