我使用函数来获取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]),)
答案 0 :(得分:1)
您可以通过ai
在bi
和ai * c + bi == idx
r < len(a)
中解析c == len(b)
和ai, bi = divmod(idx, len(b))
。这是指数计算的倒数。
另一个更直接但使用更多空间的选项是采用numpy.arange(len(a))
和numpy.arange(len(b))
的笛卡尔积,然后将其与索引一起索引以获取原始数组中的索引。