Корреляция 2D векторных полей - PullRequest
0 голосов
/ 09 ноября 2018

Имея несколько 2D потоковых карт, т.е. векторных полей, как найти статистическую корреляцию между их парами?

Проблема :

Не следует (?) Изменять размер 2 потоковых карт формы (x, y, 2): от flow1, flow2 до 1D векторов и запускать

np.correlation_coeff(flow1.reshape(1,-1),flow2.reshape(1,-1))

, поскольку записи x, y связаны.

Выход в графическом виде, только для визуализации:

потоки1: flow1 FLOW2: flow2

Я думаю о сравнении величин и направлений .

  • Как можно было бы идеально сравнить их (косинус-расстояние, ...)?

  • Как можно сравнить ковариацию между векторными полями?

Edit:

Мне известно, что np.corrcoef(flow1.reshape(2,-1), flow2.reshape(2,-1)) вернет матрицу коэффициентов корреляции 4,4, но она не будет понятна для интерпретации.

1 Ответ

0 голосов
/ 12 ноября 2018

Для некоторых мер сходства действительно может быть желательно принять во внимание пространственную структуру домена. Но коэффициент корреляции этого не делает: он инвариантен при любых перестановках области. Например, корреляция между (0, 1, 2, 3, 4) и (1, 2, 4, 8, 16) такая же, как между (1, 4, 2, 0, 3) и (2, 16 , 4, 1, 8), где оба массива были перетасованы одинаково.

Таким образом, коэффициент корреляции будет получен как:

  1. Центрирование обоих массивов, т.е. вычитание их среднего значения. Скажем, мы получаем FC1 и FC2.
  2. Взятие внутреннего продукта FC1 и FC2: это просто сумма произведений соответствующих записей.
  3. Деление на квадратные корни внутренних произведений FC1 * FC1 и FC2 * FC2.

Пример:

flow1 = np.random.uniform(size=(10, 10, 2))     # the 3rd dimension is for the components
flow2 = flow1 + np.random.uniform(size=(10, 10, 2))
flow1_centered = flow1 - np.mean(flow1, axis=(0, 1))
flow2_centered = flow2 - np.mean(flow2, axis=(0, 1))
inner_product = np.sum(flow1_centered*flow2_centered)
r = inner_product/np.sqrt(np.sum(flow1_centered**2) * np.sum(flow2_centered**2))

Здесь потоки имеют некоторую положительную корреляцию, потому что я включил поток2 в поток1. В частности, это число около 1/sqrt(2), подверженное случайному шуму.

Если это не то, что вы хотите, тогда вам нужен не коэффициент корреляции, а какой-то другой показатель сходства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...