これに似た構造を持つデータテーブルがあります。 約 10 ~ 15,000 の次元が可能な次元の積み上げテーブル。各モノには、およそ 10 の次元があります。そしてそれに関連するいくつかの Y があります。
Names default to here(1);
ndim = 12000;
dt = new table("Example", <<ADD rows=""></ADD>
次に、ほぼ完全にまばらですがメモリを爆発させるテーブルに分割しています。
dt << Split(
Split By( :Dim ),
Split( :Y ),
Group( :Thing ),
Sort by Column Property
);
私の最終目標は、KDTable() << K 最近傍を実行することです。しかし、元のデータよりもはるかに多くのデータがあるため、非常に行き詰まります。 実際には、欠落は 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 );
これを行うためのより良い方法を知っている人はいますか?