Faster and More Efficient `squareform()`

I'm using squareform(pdist(mX)) fairly often.
The problem is squareform() is so slow it makes use of pdist2(mX, mX) faster.
This is basically what squareform() does in the case above:
function [ mY ] = MySquareForm( vX )
numElements = numel(vX);
numDist = (1 + sqrt(1 + (8 * numElements))) / 2;
mY = zeros(numDist, numDist, class(vX));
mY(tril(true(numDist, numDist), -1)) = vX;
mY = mY + mY.';
end
Basically, imagine you have a symmetric matrix mX then the vector vx above is it lower tringular matrix vectorized.
Something like:
mX = randn(100, 100);
mX = mX + mX.';
mL = tril(mX, -1);
vX = mL(mL ~= 0);
If the diagonal of is zerod then one could reproduce mX from vX using MySquareForm().
Any ideas how to do the same more efficiently and faster?

답변 (0개)

카테고리

도움말 센터File Exchange에서 Cluster Analysis and Anomaly Detection에 대해 자세히 알아보기

제품

질문:

2019년 10월 2일

편집:

2019년 10월 15일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by