Skip to content

bc.st.clr_normalize() fails #367

@bhoellbacher

Description

@bhoellbacher

Running standard_workflow notebooks fails when running with CITEseq data

ValueError                                Traceback (most recent call last)
Cell In[38], line 30
     28 #perform normalization (this normalization is specific to CITEseq data)
     29 if adt_norm == 'CLR':
---> 30     bc.st.clr_normalize(adata_prot, os.path.join(results_folder_citeseq, 'citeseq'))
     32 #perform batch correction if desired otherwise just perform clustering
     33 if (batch_to_correct != 'None'):
     34     #save a copy of uncorrected in case we need it for something later

File .../lib/python3.9/site-packages/besca/st/_wrapper_funcs.py:290, in clr_normalize(adata, results_folder)
    285 start = time()
    287 # normalize per cell
    288 # this also already applies log! Is not taken seperately
    289 # already normalize BEFORE saving "raw" - as recommended in the scanpy tutorial
--> 290 normalize_geometric(adata)
    291 print("clr normalization applied to adata")
    293 # keep raw copy

File .../lib/python3.9/site-packages/besca/pp/_normalization.py:188, in normalize_geometric(adata)
    185 X = np.array(X)
    187 # replacement of zero values with very small numbers without changing the overall sums
--> 188 X = multiplicative_replacement(X)
    190 # centre log ratio transformation
    191 X = clr(X)

File .../lib/python3.9/site-packages/besca/pp/_normalization.py:132, in multiplicative_replacement(mat, delta)
     87 def multiplicative_replacement(mat, delta=None):
     88     r"""Replace all zeros with small non-zero values
     89     It uses the multiplicative replacement strategy [1]_ ,
     90     replacing zeros with a small positive :math:`\delta`
   (...)
    129            [0.0625, 0.4375, 0.4375, 0.0625]])
    130     """
--> 132     mat = closure(mat)
    133     z_mat = mat == 0
    135     num_feats = mat.shape[-1]

File .../lib/python3.9/site-packages/besca/pp/_normalization.py:37, in closure(mat)
      6 """
      7 Performs closure to ensure that all elements add up to 1.
      8 
   (...)
     34        [0.4, 0.4, 0.2]])
     35 """
     36 mat = np.atleast_2d(mat)
---> 37 if np.any(mat < 0):
     38     raise ValueError("Cannot have negative proportions")
     39 if mat.ndim > 2:

File .../lib/python3.9/site-packages/scipy/sparse/_base.py:396, in _spbase.__bool__(self)
    394     return self.nnz != 0
    395 else:
--> 396     raise ValueError("The truth value of an array with more than one "
    397                      "element is ambiguous. Use a.any() or a.all().")

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions