Ho una tabella di dati che ha una struttura simile a questa. Una tabella impilata di dimensioni con circa 10-15k dimensioni possibili.Ogni cosa ha circa 10 dimensioni.E c'è una Y associata ad esso.
Names default to here(1);
ndim = 12000;
dt = new table("Example", <<ADD rows=""></ADD>
che sto quindi suddividendo in una tabella che è quasi interamente sparsa ma ESPLODE la memoria.
dt << Split(
Split By( :Dim ),
Split( :Y ),
Group( :Thing ),
Sort by Column Property
);
Il mio obiettivo finale è fare KDTable() << K vicini più vicini su di esso.Ma si impantana molto perché ora ci sono un sacco di dati in più rispetto a quelli originali. E in realtà, i dispersi dovrebbero essere trattati come 0.
//this takes quite some time(in fact I've never actually finished it because I runout of memory)
mat = dt[0, [2::ncols(dt)]];
//changing the missings to zeros
mat[loc(ismissing(mat))] = 0;
kdt = KDTable(mat);
{rows, dist} = kdt << K nearest rows( {3, 2.0}, 1 );
Qualcuno conosce un modo migliore per farlo?