@@ -765,33 +765,34 @@ def func(x):
765765 attrp [k ] = v [subset ][:, subset ]
766766 setattr (data , f"{ attr } p" , attrp )
767767
768+ # Subset layers
769+ for layername , layer in layers .items ():
770+ if attr == "obs" :
771+ layers [layername ] = layer [subset , :]
772+ else :
773+ layers [layername ] = layer [:, subset ]
774+ data .layers = layers
775+
768776 # Subset .X
769- if data ._X is not None :
777+ if None not in layers and (X := data .X ) is not None :
778+ Xattr = "_X" if hasattr (data , "_X" ) else "X"
770779 try :
771780 if attr == "obs" :
772- data . _X = data . X [subset , :]
781+ setattr ( data , Xattr , X [subset , :])
773782 else :
774- data . _X = data . X [:, subset ]
783+ setattr ( data , Xattr , X [:, subset ])
775784 except TypeError :
776785 if attr == "obs" :
777- data . _X = data . X [np .where (subset )[0 ], :]
786+ setattr ( data , Xattr , X [np .where (subset )[0 ], :])
778787 else :
779- data . _X = data . X [:, np .where (subset )[0 ]]
788+ setattr ( data , Xattr , X [:, np .where (subset )[0 ]])
780789 # For some h5py versions, indexing arrays must have integer dtypes
781790 # https://github.com/h5py/h5py/issues/1847
782791
783792 if data .isbacked :
784793 data .file .close ()
785794 data .filename = None
786795
787- # Subset layers
788- for layer in layers :
789- if attr == "obs" :
790- layers [layer ] = layers [layer ][subset , :]
791- else :
792- layers [layer ] = layers [layer ][:, subset ]
793- data .layers = layers
794-
795796 # Subset raw - only when subsetting obs
796797 if attr == "obs" and data .raw is not None :
797798 data .raw ._X = data .raw .X [subset , :]
0 commit comments