anndata.experimental.read_elem_as_dask

anndata.experimental.read_elem_as_dask#

anndata.experimental.read_elem_as_dask(elem, chunks=None)[source]#

懒惰地从存储中读取一个元素。

假设元素使用anndata编码。这项功能将使用存储在elem属性中的编码元数据确定编码类型。

Parameters:
elem Array | Dataset | Group | Group

存储的元素。

chunks tuple[int, ...] | None (default: None)

长度 n,与基础数组的大小相同 n。注意,次要轴维度必须与稀疏的形状匹配。默认情况下,对于CSR稀疏,设置为 (1000, adata.shape[1]),对于CSC稀疏,设置为 (adata.shape[0], 1000),而对于密集情况则使用磁盘上的分块。可以使用 -1None 来表示使用相应维度的大小。

optional

长度 n,与基础数组的大小相同 n。注意,次要轴维度必须与稀疏的形状匹配。默认为 (1000, adata.shape[1]) 对于 CSR 稀疏, (adata.shape[0], 1000) 对于 CSC 稀疏,其他情况下则为密集型的磁盘分块。可以使用 -1None 来表示使用相应维度的大小。

Return type:

DaskArray

Returns:

Dask数组

示例

设置我们的示例:

>>> from scanpy.datasets import pbmc3k
>>> import tempfile
>>> import anndata as ad
>>> import zarr
>>> tmp_path = tempfile.gettempdir()
>>> zarr_path = tmp_path + "/adata.zarr"
>>> adata = pbmc3k()
>>> adata.layers["dense"] = adata.X.toarray()
>>> adata.write_zarr(zarr_path)

从zarr存储中延迟读取一个稀疏矩阵,使用自定义块大小和默认值:

>>> g = zarr.open(zarr_path)
>>> adata.X = ad.experimental.read_elem_as_dask(g["X"])
>>> adata.X
dask.array<make_dask_chunk, shape=(2700, 32738), dtype=float32, chunksize=(1000, 32738), chunktype=scipy.csr_matrix>
>>> adata.X = ad.experimental.read_elem_as_dask(
...     g["X"], chunks=(500, adata.shape[1])
... )
>>> adata.X
dask.array<make_dask_chunk, shape=(2700, 32738), dtype=float32, chunksize=(500, 32738), chunktype=scipy.csr_matrix>

从 zarr 存储惰性读取稠密矩阵:

>>> adata.layers["dense"] = ad.experimental.read_elem_as_dask(g["layers/dense"])
>>> adata.layers["dense"]
dask.array<from-zarr, shape=(2700, 32738), dtype=float32, chunksize=(169, 2047), chunktype=numpy.ndarray>

从磁盘创建一个新的 anndata 对象,使用自定义块:

>>> adata = ad.AnnData(
...     obs=ad.io.read_elem(g["obs"]),
...     var=ad.io.read_elem(g["var"]),
...     uns=ad.io.read_elem(g["uns"]),
...     obsm=ad.io.read_elem(g["obsm"]),
...     varm=ad.io.read_elem(g["varm"]),
... )
>>> adata.X = ad.experimental.read_elem_as_dask(
...     g["X"], chunks=(500, adata.shape[1])
... )
>>> adata.layers["dense"] = ad.experimental.read_elem_as_dask(g["layers/dense"])

我们还支持使用 -1 和 None 作为块大小,以表示读取整个轴:

>>> adata.X = ad.experimental.read_elem_as_dask(g["X"], chunks=(500, -1))
>>> adata.X = ad.experimental.read_elem_as_dask(g["X"], chunks=(500, None))