scanpy的标准化从sc.pp.normalize_per_cell()
更新成了sc.pp.normalize_total()
,它官方也是建议用后者(当然前面这个函数仍然存在,且可以正常使用)。二者目的是基本一致的,处理数据的过程也没变,但是存在细微的差别,总体而言就是新的sc.pp.normalize_total()
在参数设置方面更加人性化了。如下是旧的sc.pp.normalize_per_cell()
警告。
最大的区别用人话来说,就是它不会自动给你过滤了,原来这个函数默认旧把min_counts<1的基因给去除了,实际上许多时候也无伤大雅,但是有时我们并不像这个潜在的var过滤发生,所以在新版的
sc.pp.normalize_total()
就把这个去除掉了,你需要结合使用filter()
自己人为决定是否需要操作基因数目的变更。
此外,如果scanpy标准化环节出现以下报错,也是把sc.pp.normalize_per_cell()
换成使用sc.pp.normalize_total()
可以解决:
numpy.core._exceptions._UFuncOutputCastingError: Cannot cast ufunc 'divide' output from dtype('float64') to dtype('uint64') with casting rule 'same_kind'