我现在基于probalistic latent semantic indexing(plsa)做图像检索,需要计算一个条件概率p(z|w,v,d),我直接定义成了“double p_z_d_wt_wv[][][][];”简单地说,z是主题,w是英文单词,v是视觉单词,d是文档,大小分别为12100500*7000,就是12个主题,100个英文单词,500个视觉单词,7000个文档,double型的话算下来大概32G,其中z和d的数目是确定的,每个d的w和v的数目是不确定的。
根据大家的建议,我使用mongodb来存储这个四维数组。
我的思路是这样的,先根据z,d,w,v生成一个字符串,比如说z=1,d=2,w=3,v=4,生成字符串"1_2_3_4",作为数组元素的索引,还有一个字段value存储这个数组元素的值。所以我的数据像下面这个样子:
`{ "_id" : { "$oid" : "51e0c6f15a66ea5c32a99773"} , "key" : "1_2_3_4" , "value" : 113.1232}
{ "_id" : { "$oid" : "51e0c6f15a66ea5c32a99774"} , "key" : "1_2_3_5" , "value" : 11.1243}`
key是数组元素的索引,类似于四位数组的下标,value就是这个元素的值。
查询的时候先根据key得到这条记录,然后得到value的值,更新的时候也是先根据key查询到这个记录,然后更新value的值。
因为使用的算法本身需要两步,第一步需要更新数组中所有元素的值,第二步需要查询数组中所有元素的值。
按照我的实现速度太慢了,光更新就得几个小时,由于这个算法是迭代进行的,按经验要迭代几百次,如果一次几个小时就根本无法忍受,请问有什么方法可以提高速度呢?
大家有什么好的建议没,多谢了。
[{key-z:value},{key-w:value},{key-d:value},{key-v:value}]都可以存储
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。