Matlab's corr
по умолчанию вычисляет корреляцию столбцов A
и B
, а Python * corrcoef
вычисляет корреляцию строк внутри массива (если вы передаете функции два массива, она похоже, он будет делать то же самое с вертикально сложенными массивами). Если вам не важна производительность и вам нужно найти простой способ сделать это, вы можете сложить два массива по горизонтали, вычислить корреляцию и получить соответствующие элементы, которые вам нужны:
correlation = np.corrcoef(np.hstack((B,A)),rowvar=False)[0,1:]
Но если вам все равно Если говорить о производительности больше, чем о простых кодах, вам придется реализовать функцию corr
самостоятельно. (Прокомментируйте, и я добавлю его, если это то, что вы ищете)
ОБНОВЛЕНИЕ : если вы хотите реализовать corr
, чтобы предотвратить дополнительные вычисления / использование памяти, вы можете рассчитать корреляцию, используя ее формулу, сначала нормализовав массивы, а затем умножив их:
A = (A - A.mean(axis=0))/A.std(axis=0)
B = (B - B.mean(axis=0))/B.std(axis=0)
correlation = (np.dot(B.T, A)/B.shape[0])[0]
вывод примера кода:
A = np.array([1,2,2,2]).reshape(4,1)
B = np.arange(20).reshape(4,5)
Python: np.corrcoef(np.hstack((A,B)),rowvar=False)[0,1:]
[0.77459667 0.77459667 0.77459667 0.77459667 0.77459667]
Matlab: corr(A,B)
0.7746 0.7746 0.7746 0.7746 0.7746