04-16-2016, 10:20 AM
Is it possible for there to be a function (in 50g or prime) to calculate the euclidean distance or the euclidean cumulative distance matrix?
e.g. From:
To
e.g. From:
To
M1:=[[1.1,3.1],[2.1,4.1],[3.4,3.2]]
M2:=[[0.7,2.1],[1.6,3.6],[3.2,1.6],[3.5,2.1],[3.1,4]]
MAKEMAT(√((M1(I,1)-M2(J,1))^2+(M1(I,2)-M2(J,2))^2),rowDim(M1),rowDim(M2))
EXPORT CDM(DM)
BEGIN
LOCAL CM,j,k;
CM:=MAKEMAT(0,rowDim(DM),colDim(DM));
FOR j FROM 1 TO rowDim(DM) DO
FOR k FROM 1 TO colDim(DM) DO
IF (j==1) AND (k==1) THEN
CM(j,k):=DM(j,k);
END;
IF (j==1) AND (k>1) THEN
CM(j,k):=DM(j,k)+CM(j,k-1);
END;
IF (j>1) AND (k==1) THEN
CM(j,k):=DM(j,k)+CM(j-1,k);
END;
IF (j>1) AND (k>1) THEN
CM(j,k):=DM(j,k)+MIN(CM(j-1,k-1),CM(j-1,k),CM(j,k-1));
END;
END;
END;
RETURN CM;
END;
EXPORT CDM(DM)
BEGIN
LOCAL CM,j,k;
IF DM==0 then
M1:=[[1.1,3.1],[2.1,4.1],[3.4,3.2]];
M2:=[[0.7,2.1],[1.6,3.6],[3.2,1.6],[3.5,2.1],[3.1,4]];
DM:=MAKEMAT(√((M1(I,1)-M2(J,1))^2+(M1(I,2)-M2(J,2))^2),rowDim(M1),rowDim(M2));
END;
CM:=MAKEMAT(0,rowDim(DM),colDim(DM));
FOR j FROM 1 TO rowDim(DM) DO
FOR k FROM 1 TO colDim(DM) DO
IF (j==1) AND (k==1) THEN
CM(j,k):=DM(j,k);
END;
IF (j==1) AND (k>1) THEN
CM(j,k):=DM(j,k)+CM(j,k-1);
END;
IF (j>1) AND (k==1) THEN
CM(j,k):=DM(j,k)+CM(j-1,k);
END;
IF (j>1) AND (k>1) THEN
CM(j,k):=DM(j,k)+MIN(CM(j-1,k-1),CM(j-1,k),CM(j,k-1));
END;
END;
END;
RETURN CM;
END;
[code]