【发布时间】:2011-01-13 02:01:42
【问题描述】:
我有一个联合概率质量函数数组,其形状例如 (1,2,3,4,5,6),我想计算概率表,条件是某些维度的值(导出cpts),用于决策目的。
我现在想出的代码如下(输入是字典“vdict”,格式为 {'variable_1': value_1, 'variable_2': value_2 ... } )
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。
【问题讨论】:
标签: python numpy probability arrays recarray