t3toolbox.backend.probing.probe_dense ===================================== .. py:function:: t3toolbox.backend.probing.probe_dense(vectors: t3toolbox.backend.common.typ.Sequence[t3toolbox.backend.common.NDArray], T: t3toolbox.backend.common.NDArray, use_jax: bool = False) -> t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.NDArray] Probe a dense tensor. :param T: Tensor to be probed. shape=Z+(N1,...,Nd) :type T: NDArray :param vectors: Probing input vectors. len=d. elm_shape=K+(Ni,) :type vectors: typ.Sequence[NDArray] :param xnp: Linear algebra backend. Default: np (numpy) :returns: Probes. len=d. elm_shape=(Ni,) or elm_shape=Z+K+(Ni,) :rtype: typ.Tuple[NDArray] .. rubric:: Examples Probe with one set of vectors: >>> import numpy as np >>> import t3toolbox.backend.probing as t3p >>> T = np.random.randn(10,11,12) >>> u0 = np.random.randn(10) >>> u1 = np.random.randn(11) >>> u2 = np.random.randn(12) >>> yy = t3p.probe_dense((u0,u1,u2),T) >>> y0 = np.einsum('ijk,j,k', T, u1, u2) >>> y1 = np.einsum('ijk,i,k', T, u0, u2) >>> y2 = np.einsum('ijk,i,j', T, u0, u1) >>> print(np.linalg.norm(yy[0] - y0)) 2.0928808318295785e-14 >>> print(np.linalg.norm(yy[1] - y1)) 1.0841599276764049e-14 >>> print(np.linalg.norm(yy[2] - y2)) 1.2970142174948615e-14 Vectorize over probing vectors >>> import numpy as np >>> import t3toolbox.backend.probing as t3p >>> T = np.random.randn(10,11,12) >>> u0 = np.random.randn(2,3, 10) >>> u1 = np.random.randn(2,3, 11) >>> u2 = np.random.randn(2,3, 12) >>> yy = t3p.probe_dense((u0,u1,u2),T) >>> y0 = np.einsum('ijk,uvj,uvk->uvi', T, u1, u2) >>> y1 = np.einsum('ijk,uvi,uvk->uvj', T, u0, u2) >>> y2 = np.einsum('ijk,uvi,uvj->uvk', T, u0, u1) >>> print(np.linalg.norm(yy[0] - y0)) 2.0928808318295785e-14 >>> print(np.linalg.norm(yy[1] - y1)) 1.0841599276764049e-14 >>> print(np.linalg.norm(yy[2] - y2)) 1.2970142174948615e-14 Vectorize over probing vectors and big tensor >>> import numpy as np >>> import t3toolbox.backend.probing as t3p >>> T = np.random.randn(4,5,6, 10,11,12) >>> u0 = np.random.randn(2,3, 10) >>> u1 = np.random.randn(2,3, 11) >>> u2 = np.random.randn(2,3, 12) >>> yy = t3p.probe_dense((u0,u1,u2),T) >>> y0 = np.einsum('xyzijk,uvj,uvk->xyzuvi', T, u1, u2) >>> y1 = np.einsum('xyzijk,uvi,uvk->xyzuvj', T, u0, u2) >>> y2 = np.einsum('xyzijk,uvi,uvj->xyzuvk', T, u0, u1) >>> print(np.linalg.norm(yy[0] - y0)) 2.0928808318295785e-14 >>> print(np.linalg.norm(yy[1] - y1)) 1.0841599276764049e-14 >>> print(np.linalg.norm(yy[2] - y2)) 1.2970142174948615e-14