屏蔽Y数组以仅获取其X1 == X2的值

时间:2018-09-25 12:35:16

标签: python python-3.x numpy

我有两组点,它们的坐标分别存储在数组X1 Y1和X2 Y2中。在集合1和2中,我们具有相同数量的点。

我想做的是屏蔽最长的Y数组(将始终知道)以获取两组中都可用的点的Y值。对于上下文,这是因为我要计算原始实验数据和滑动平均数据之间的相关因子。滑动平均会裁剪一些点(与选定的平均窗口宽度一样多),因此原始数据数组总是更大。

我尝试过此操作,但仅在X1和X2具有相同的大小时有效:

# Base data
X1 = np.array([1,2,3,4,5])
Y1 = np.array([10,20,30,40,50])
X2 = np.array([2,3,4])
Y2 = np.array([200,300,400])

# Y data that share an X
Y1_with_common_X = Y1[X1 == X2] # expected result: y2 == np.array([20,30,40])

# analyze the cropped data (this function is already written and works fine)
R2 = correlation(Y2, Y1_with_common_X)

如何处理不同大小的数组?提前致谢。

编辑:这是一张图片,更清晰。 enter image description here

2 个答案:

答案 0 :(得分:2)

好像您需要np.isin()

Y1[np.isin(X1, X2)]
#[20 30 40]

答案 1 :(得分:0)

只需简化数组的视图即可

length = min(len(X1), len(X2))
X1s = X1[:length]
Y1s = Y1[:length]
X2s = X2[:length]
Y2s = Y2[:length]