torch.Tensor.to_sparse¶
- Tensor.to_sparse(sparseDims) → Tensor
返回张量的稀疏副本。PyTorch 支持坐标格式的稀疏张量。
- 参数:
sparseDims (int, 可选) – 新稀疏张量中要包含的稀疏维度数
示例:
>>> d = torch.tensor([[0, 0, 0], [9, 0, 10], [0, 0, 0]]) >>> d tensor([[ 0, 0, 0], [ 9, 0, 10], [ 0, 0, 0]]) >>> d.to_sparse() tensor(indices=tensor([[1, 1], [0, 2]]), values=tensor([ 9, 10]), size=(3, 3), nnz=2, layout=torch.sparse_coo) >>> d.to_sparse(1) tensor(indices=tensor([[1]]), values=tensor([[ 9, 0, 10]]), size=(3, 3), nnz=1, layout=torch.sparse_coo)
- to_sparse(*, layout=None, blocksize=None, dense_dim=None) → 张量
返回具有指定布局和块大小的稀疏张量。如果
self
是步进格式,则可以指定密集维度数,将创建一个混合稀疏张量,其中包含 dense_dim 个密集维度和 self.dim() - 2 - dense_dim 个批处理维度。注意
如果
self
的布局和块大小参数与指定的布局和块大小匹配,则返回self
。否则,返回self
的稀疏张量副本。- 参数:
布局(
torch.layout
,可选)- 所需的稀疏布局。以下选项之一:torch.sparse_coo
,torch.sparse_csr
,torch.sparse_csc
,torch.sparse_bsr
,或torch.sparse_bsc
。默认:如果None
,torch.sparse_coo
。blocksize(列表、元组、
torch.Size
,可选)- 结果 BSR 或 BSC 张量的块大小。对于其他布局,指定不是None
的块大小将导致 RuntimeError 异常。块大小必须是一个长度为二的元组,其元素可以整除两个稀疏维度。dense_dim(int,可选)- 结果 CSR、CSC、BSR 或 BSC 张量的密集维度数。此参数仅在
self
是步长张量时使用,且必须是一个介于 0 和self
张量维度减去 2 之间的值。
示例:
>>> x = torch.tensor([[1, 0], [0, 0], [2, 3]]) >>> x.to_sparse(layout=torch.sparse_coo) tensor(indices=tensor([[0, 2, 2], [0, 0, 1]]), values=tensor([1, 2, 3]), size=(3, 2), nnz=3, layout=torch.sparse_coo) >>> x.to_sparse(layout=torch.sparse_bsr, blocksize=(1, 2)) tensor(crow_indices=tensor([0, 1, 1, 2]), col_indices=tensor([0, 0]), values=tensor([[[1, 0]], [[2, 3]]]), size=(3, 2), nnz=2, layout=torch.sparse_bsr) >>> x.to_sparse(layout=torch.sparse_bsr, blocksize=(2, 1)) RuntimeError: Tensor size(-2) 3 needs to be divisible by blocksize[0] 2 >>> x.to_sparse(layout=torch.sparse_csr, blocksize=(3, 1)) RuntimeError: to_sparse for Strided to SparseCsr conversion does not use specified blocksize >>> x = torch.tensor([[[1], [0]], [[0], [0]], [[2], [3]]]) >>> x.to_sparse(layout=torch.sparse_csr, dense_dim=1) tensor(crow_indices=tensor([0, 1, 1, 3]), col_indices=tensor([0, 0, 1]), values=tensor([[1], [2], [3]]), size=(3, 2, 1), nnz=3, layout=torch.sparse_csr)