Sparse Tensor as Matrix (pyttb.sptenmat)
For all examples in this document, the following module imports are assumed:
>>> import pyttb as ttb
>>> import numpy as np
- class pyttb.sptenmat(subs: ndarray | None = None, vals: ndarray | None = None, rdims: ndarray | None = None, cdims: ndarray | None = None, tshape: tuple[int, ...] = (), copy: bool = True)[source]
Bases:
objectStore sparse tensor as a sparse matrix.
- classmethod from_array(array: coo_matrix | ndarray, rdims: ndarray | None = None, cdims: ndarray | None = None, tshape: tuple[int, ...] = ())[source]
Construct a
pyttb.sptenmat.Constructed from a coo_matrix along with the mappings of the row (rdims) and column indices (cdims) and the shape of the original tensor (tshape).
- Parameters:
array – Representation of sparse tensor data (sparse or dense).
rdims – Mapping of row indices.
cdims – Mapping of column indices.
tshape – Shape of the original tensor.
Examples
- Create a
pyttb.sptenmatfrom a sparse matrix and unwrapping dimensions. Infer column dimensions from row dimensions specification.
>>> data = np.array([6, 7]) >>> rows = np.array([1, 1]) >>> cols = np.array([6, 7]) >>> sparse_matrix = sparse.coo_matrix((data, (rows, cols))) >>> tshape = (4, 4, 4) >>> S = ttb.sptenmat.from_array( sparse_matrix, rdims=np.array([0]), tshape=tshape ) >>> S sptenmat corresponding to a sptensor of shape (4, 4, 4) with 2 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [1, 6] = 6 [1, 7] = 7
- copy() sptenmat[source]
Return a deep copy of the
pyttb.sptenmat.Examples
Create a
pyttb.sptenmat(ST1) and make a deep copy. Verify the deep copy (ST3) is not just a reference (like ST2) to the original.>>> S1 = ttb.sptensor(shape=(2, 2)) >>> S1[0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST2 = ST1 >>> ST3 = ST1.copy() >>> ST1[0, 0] = 3 >>> ST1.to_sptensor().isequal(ST2.to_sptensor()) True >>> ST1.to_sptensor().isequal(ST3.to_sptensor()) False
- to_sptensor() sptensor[source]
Construct a
pyttb.sptensorfrompyttb.sptenmat.Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> S1 sparse tensor of shape (2, 2, 2) with 1 nonzeros and order F [0, 0, 0] = 1.0 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST1 sptenmat corresponding to a sptensor of shape (2, 2, 2) with 1 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [0, 0] = 1.0 >>> ST1.to_sptensor() sparse tensor of shape (2, 2, 2) with 1 nonzeros and order F [0, 0, 0] = 1.0
- property shape: tuple[int, ...]
Return the shape of a
pyttb.sptenmat.Examples
>>> ttb.sptenmat().shape # empty sptenmat () >>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST1.shape (2, 4)
- double(immutable: bool = False) coo_matrix[source]
Convert a
pyttb.sptenmatto a COOscipy.sparse.coo_matrix.- Parameters:
immutable (Parameter for compatibility but coo_matrix doesn’t allow assignment.)
Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> COO = ST1.double() >>> type(COO) <class 'scipy.sparse._coo.coo_matrix'> >>> COO.nnz 1 >>> COO.toarray() array([[1., 0., 0., 0.], [0., 0., 0., 0.]])
- full() tenmat[source]
Convert a
pyttb.sptenmatto a (dense)pyttb.tenmat.Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST1.full() matrix corresponding to a tensor of shape (2, 2, 2) with order F rindices = [ 0 ] (modes of tensor corresponding to rows) cindices = [ 1, 2 ] (modes of tensor corresponding to columns) data[:, :] = [[1. 0. 0. 0.] [0. 0. 0. 0.]]
- property nnz: int
Number of nonzero values in the
pyttb.sptenmat.Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST1.nnz 1
- norm() float[source]
Compute the norm of the
pyttb.sptenmat.Frobenius norm, or square root of the sum of squares of entries.
Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST1.norm() 1.0
- isequal(other: sptenmat) bool[source]
Exact equality for
pyttb.sptenmat.Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST2 = ttb.sptenmat() >>> ST1.isequal(ST2) False >>> ST1.isequal(ST1) True
- __pos__()[source]
Unary plus operator (+).
Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> +ST1 sptenmat corresponding to a sptensor of shape (2, 2, 2) with 1 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [0, 0] = 1.0
- __neg__()[source]
Unary minus operator (-).
Examples
>>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> -ST1 sptenmat corresponding to a sptensor of shape (2, 2, 2) with 1 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [0, 0] = -1.0
- __setitem__(key, value)[source]
Subscripted assignment for the
pyttb.sptenmat.Examples
Create an empty
pyttb.sptenmat.>>> ST = ttb.sptenmat(rdims=np.array([0]), tshape=(2, 2, 2)) >>> ST sptenmat corresponding to a sptensor of shape (2, 4) with 0 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns)
Insert a new value into it.
>>> ST[0, 0] = 1.0 >>> ST sptenmat corresponding to a sptensor of shape (2, 2, 2) with 1 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [0, 0] = 1.0
Update an existing value in it.
>>> ST[0, 0] = 2.0 >>> ST sptenmat corresponding to a sptensor of shape (2, 2, 2) with 1 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [0, 0] = 2.0
- __repr__()[source]
Return string representation of a
pyttb.sptenmat.Examples
>>> ttb.sptenmat() sptenmat corresponding to a sptensor of shape () with 0 nonzeros and order F rdims = [ ] (modes of sptensor corresponding to rows) cdims = [ ] (modes of sptensor corresponding to columns) >>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST1 sptenmat corresponding to a sptensor of shape (2, 2, 2) with 1 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [0, 0] = 1.0
- Returns:
str –
- Contains the shape, row indices (rindices), column indices (cindices)
and data as strings on different lines.
- __str__()
Return string representation of a
pyttb.sptenmat.Examples
>>> ttb.sptenmat() sptenmat corresponding to a sptensor of shape () with 0 nonzeros and order F rdims = [ ] (modes of sptensor corresponding to rows) cdims = [ ] (modes of sptensor corresponding to columns) >>> S1 = ttb.sptensor(shape=(2, 2, 2)) >>> S1[0, 0, 0] = 1 >>> ST1 = S1.to_sptenmat(np.array([0])) >>> ST1 sptenmat corresponding to a sptensor of shape (2, 2, 2) with 1 nonzeros and order F rdims = [ 0 ] (modes of sptensor corresponding to rows) cdims = [ 1, 2 ] (modes of sptensor corresponding to columns) [0, 0] = 1.0
- Returns:
str –
- Contains the shape, row indices (rindices), column indices (cindices)
and data as strings on different lines.