生成随机索引向量

时间:2011-04-23 23:49:13

标签: java vector words

我需要生成随机索引向量(具有大约1000的大量维度),这将主要是稀疏的(大多数为零值)。向量可以包含1(正维度),-1(负维度)和0的值。这些向量是为文本语料库中的每个单词生成的。什么是在Java中实现这一目标的最佳方法,同时确保结果向量的随机性?

谢谢

2 个答案:

答案 0 :(得分:1)

要存储矢量,请保留其非零位置和+ 1 / -1位的列表。你需要一个+ 1 / -1位的字节。

如果你真的想要尽可能多地保存内存,你可以保留一个长BitSet包含所有向量的+ 1 / -1信息,每个向量都会记住它在BitSet中的起始索引

要生成与其他矢量正交的矢量,您可以执行以下操作:

 [0 1 0 0 -1 ...]
 [1 0 1 0 0 ...]  // zeros where the first vector is non-zero
 ...

保留所有可用1000个索引的链接列表。生成向量时,选择一小部分随机索引,生成这些索引非零的向量,并从可用索引列表中删除索引。但是这样你很快就会耗尽可用的指数。但是在1000维空间中只有1000个相互正交的向量,所以无论如何你都可以创建最多1000个单词的向量。

此外,向量必须是正交的这一事实意味着它们不能完全随机,因为真正的随机向量可能恰好是非正交的。

答案 1 :(得分:0)

如果你想尝试一种低成本的方法(编程方式),那么HashMap<Integer, Byte>或者近似的东西可以产生一个不错的稀疏向量。

相关问题