我有一个联合概率质量函数数组,其形状例如 (1,2,3,4,5,6),我想计算概率表,以某些维度的值为条件(导出 cpts) , 用于决策目的。
我现在想出的代码如下(输入是 {'variable_1': value_1, 'variable_2': value_2 ... } 形式的字典“vdict”)
for i in vdict:
dim = self.invardict.index(i) # The index of the dimension that our Variable resides in
val = self.valdict[i][vdict[i]] # The value we want it to be
d = d.swapaxes(0, dim)
**d = array([d[val]])**
d = d.swapaxes(0, dim)
...
所以,我目前做的是:
- 我将变量转换为 cpt 中的相应维度。
- 我将第零轴与之前找到的轴交换。
- 我只用所需的值替换整个 0 轴。
我把维度放回原来的轴。
现在,问题是,为了执行第 2 步,我必须 (a.) 计算一个子数组,并且 (b.) 将其放入一个列表并再次将其转换为数组,这样我就有了我的新数组。
事情是,粗体的东西意味着我创建新对象,而不是只使用对旧对象的引用,如果 d 非常大(这发生在我身上)并且使用 d 的方法被调用多次(再次,发生在我身上)整个结果非常缓慢。
那么,有没有人想出一个想法,可以让这小段代码变得更简单,并且运行得更快?也许可以让我计算适当的条件。
注意:我必须保持原始轴顺序(或者至少要确定在删除轴时如何将变量更新为尺寸字典)。我不想诉诸自定义 dtypes。