Маскируйте массив Y, чтобы получить его значения только для X1 == X2

1

У меня есть два набора точек, координаты которых хранятся в массивах 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)

Как сделать для массивов разного размера? Заранее спасибо.

Изменение: вот изображение, оно яснее. Изображение 174551

Теги:
numpy
python-3.x

2 ответа

2
Лучший ответ

Похоже, вам нужно np.isin():

Y1[np.isin(X1, X2)]
#[20 30 40]
  • 0
    Прекрасно, это коротко и работает отлично, спасибо!
0

Просто сделайте сокращенные виды массивов:

length = min(len(X1), len(X2))
X1s = X1[:length]
Y1s = Y1[:length]
X2s = X2[:length]
Y2s = Y2[:length]
  • 0
    Нет, потому что это всегда обрезает конец массивов, в то время как мои дополнительные точки расположены с обеих сторон, а не только справа.
  • 0
    А ну понятно. Ну, тогда надо было написать более актуальный пример! Я уверен, что вы можете взять его отсюда, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню