Numpy.where()在其条件中有一个数组

时间:2016-05-10 16:51:47

标签: python numpy vectorization

我不知道如何描述这个,所以我只是展示它。

我该怎么做......

for iy in random_y:
    print(x[np.where(y == iy)], iy)

  X        y
[ 0.5] :   0.247403959255
[ 2.]  :   0.841470984808
[ 49.5]:  -0.373464754784

没有for循环,我得到的解决方案就像使用np.where()array[cond]时的单个数组一样。既然你知道,那就是Python B)

注意:我想要这样做的原因是因为我有一个Y值的随机子集,我想找到相应的X值。

2 个答案:

答案 0 :(得分:2)

如果您正在寻找完全匹配,您只需使用np.in1d,因为这是一个完美的使用场景,就像这样 -

first_output = x[np.in1d(y,random_y)]
second_output = random_y[np.in1d(random_y,y)

如果您正在处理浮点数,则可能需要在比较中使用一些容差因子。因此,对于此类情况,您可以使用NumPy broadcasting,然后使用np.where,就像这样 -

tol = 1e-5 # Edit this to change tolerance
R,C = np.where(np.abs(random_y[:,None] - y)<=tol)

first_output = x[C]
second_output = random_y[R]

答案 1 :(得分:0)

也许这可以解决问题(未经测试):

print(Str(x[np.where(y == iy)]) + " " + Str(iy) + "\n") for iy in random_y