反向 numpy 参考笛卡尔积
reverse numpy reference 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]),)
您可以在 ai * c + bi == idx
中求解 ai
和 bi
,其中 r < len(a)
和 c == len(b)
通过 ai, bi = divmod(idx, len(b))
。这是指数计算的逆运算。
另一个更直接但使用更多的选项 space 是取 numpy.arange(len(a))
和 numpy.arange(len(b))
的笛卡尔积,然后用您的索引对其进行索引以获得索引原始数组。
我正在使用一个函数来获取 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]),)
您可以在 ai * c + bi == idx
中求解 ai
和 bi
,其中 r < len(a)
和 c == len(b)
通过 ai, bi = divmod(idx, len(b))
。这是指数计算的逆运算。
另一个更直接但使用更多的选项 space 是取 numpy.arange(len(a))
和 numpy.arange(len(b))
的笛卡尔积,然后用您的索引对其进行索引以获得索引原始数组。