Для некоторых мер сходства действительно может быть желательно принять во внимание пространственную структуру домена. Но коэффициент корреляции этого не делает: он инвариантен при любых перестановках области. Например, корреляция между (0, 1, 2, 3, 4) и (1, 2, 4, 8, 16) такая же, как между (1, 4, 2, 0, 3) и (2, 16 , 4, 1, 8), где оба массива были перетасованы одинаково.
Таким образом, коэффициент корреляции будет получен как:
- Центрирование обоих массивов, т.е. вычитание их среднего значения. Скажем, мы получаем FC1 и FC2.
- Взятие внутреннего продукта FC1 и FC2: это просто сумма произведений соответствующих записей.
- Деление на квадратные корни внутренних произведений 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)
, подверженное случайному шуму.
Если это не то, что вы хотите, тогда вам нужен не коэффициент корреляции, а какой-то другой показатель сходства.