反向numpy参考笛卡尔积

时间:2017-06-28 03:00:59

标签: python arrays pandas numpy cartesian-product

我使用函数来获取3组数组(cp1)的笛卡尔积,这些数组是从pandas数据帧中的列派生的。在获得这个(cp2)之后,我运行一个测试以检查总和是否小于1.05,如果是,我想找到原始数组中的组合从它所在的位置生成真正。有没有办法用numpy / python / pandas做到这一点?任何帮助,将不胜感激。最后,我想在生成真实条件的数据框中的每一列中获取原始索引。

In [780]: cp1.shape

Out[780]: (8, 3)

In [781]: cp2.shape

Out[781]: (512, 3)

In [782]: cp2

Out[782]: array([[ 0.43478262,  0.33333334,  0.29411763],
                 [ 0.43478262,  0.33333334,  0.32258067],
                 [ 0.43478262,  0.33333334,  0.32786885],
                   ..., 
                 [ 0.43478262,  0.32258067,  0.32258067],
                 [ 0.43478262,  0.32258067,  0.29850748],
                 [ 0.43478262,  0.32258067,  0.32258067]])

In [783]: bools = cp2.sum(1) < 1.05

In [784]: np.where(bools)

Out[784]: (array([392, 398, 440, 446]),)

1 个答案:

答案 0 :(得分:1)

您可以通过aibiai * c + bi == idx r < len(a)中解析c == len(b)ai, bi = divmod(idx, len(b))。这是指数计算的倒数。

另一个更直接但使用更多空间的选项是采用numpy.arange(len(a))numpy.arange(len(b))的笛卡尔积,然后将其与索引一起索引以获取原始数组中的索引。