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: object

Store 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.sptenmat from 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
property order: Literal['F']

Return the data layout of the underlying storage.

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.sptensor from pyttb.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.sptenmat to a COO scipy.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.sptenmat to 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.