Интересно, имеет ли MATLAB набор инструментов для общей матричной операции с разреженными матрицами.corr() с разреженной матрицей - MATLAB
Используя плотную матрицу, можно вычислить матрицу коррелограмме делать:
R = rand(10,100)
[r,p] = corr(R)
с разреженной матрицей Я хотел бы сделать:
S = sprand(10,100,.2)
[r,p] = corr(S)
Однако следующая ошибка вызвала:
Error using betainc
Inputs must be real, full, and double or single.
Error in tcdf (line 70)
p(t) = betainc(xsq(t) ./ (v(t) + xsq(t)), 0.5, v(t)/2, 'upper')/2;
Error in corr>pvalPearson (line 720)
p = 2*tcdf(-abs(t),n-2);
Error in corr>corrPearson (line 321)
pval(ltri) = pvalPearson(tail, coef(ltri), n);
Error in corr (line 204)
[coef,pval] = corrFun(rows,tail,x);
Может ли кто-нибудь мне помочь?
В настоящее время я не знаю никакой функции в MATLAB, которая может вычислять корреляцию на разреженной матрице. Возможно, вам придется реализовать это самостоятельно. Однако этот пост на Cross Validated может дать некоторое представление: http://stats.stackexchange.com/questions/120513/cross-correlation-for-very-sparse-binary-data – rayryeng
Я не знаю о какой-либо функции, выполняющей это. В случае, если Matlab этого не выполнил, наиболее вероятно, что после использования corr малочисленны матрицы (примеры: 'corr (rand (10))', 'corr (toeplitz ([2,1,0,0,0,0, 0,0,0,0])) '). Если вы хотите реализовать это, то это нормально. Однако вы можете подумать о наличии критериев, в которых вы предполагаете, что корреляция равна нулю. Подумайте, что полностью заполненная разреженная матрица занимает примерно в три раза больше полной матрицы. Кроме того, пример, который вы показываете, не является случаем, когда разреженный рекомендуется использовать 's = sprand (10,10, .2); F = полная (кв); [Г, р] = корр (ы) ' – patrik