我有一些函数,是一个大型分析软件的一部分,需要一个布尔掩码来将数组项分为两组。这些函数是这样的:
def process(data, a_mask):
b_mask = -a_mask
res_a = func_a(data[a_mask])
res_b = func_b(data[b_mask])
return res_a, res_b
现在,我需要使用这些函数(不做修改)与一个只包含类“a”项的大数组一起使用,但我想节省RAM并且不传递具有所有True的布尔掩码。例如,我可以传递像slice(None,None)这样的切片。
问题是如果a_mask是一个切片,那么行b_mask = -a_mask将失败。理想情况下,-a_mask应该给出0项选择。
我考虑创建一个“修改后”的切片对象,该对象将__neg __()方法实现为null切片(例如slice(0,0))。我不知道这是否可行。
其他解决方案,既不修改process()函数,又避免分配全True布尔数组的方法也将被接受。
process
函数实际上相当复杂,分析的大部分依赖于它的正确性。我宁愿为这个特定的用例做一个hack,也不想冒险去干扰其他(已经经过充分测试)的用例。谢谢。 - user2304916process
函数内部有多么复杂并不重要 - 最终,所有的改变只会涉及一个关键字参数和5或6行新代码来处理条件判断。 - ali_m