Matlab:如何使用稀疏键来访问稀疏数据?

时间:2013-10-27 23:32:09

标签: regex matlab math sparse-matrix

我试图使用BEpos和BEneg等密钥访问稀疏mlf,每行一个密钥。现在的问题是,大多数命令并不是要处理太大的输入:bin2dec需要没有空格的干净二进制数,但正则表达式黑客行为不能太多 - 依此类推。

  

如何使用稀疏密钥访问稀疏数据?

示例

K>>  mlf=sparse([],[],[],2^31,1);  
BEpos=Cg(pos,:)

BEpos =

   (1,1)        1
   (2,3)        1
   (2,4)        1

K>> mlf(bin2dec(num2str(BEpos)))=1
Error using bin2dec (line 36)
Binary string must be 52 bits or less.

K>> num2str(BEpos)

ans =

1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  0  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

K>> bin2dec(num2str('1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0'))
Error using bin2dec (line 36)
Binary string must be 52 bits or less.

K>> regexprep(num2str(BEpos),'[^\w'']','')
Error using regexprep
The 'STRING' input must be a one-dimensional array
of char or cell arrays of strings.

手动

K>> mlf(bin2dec('1000000000000000000000000000000'))

ans =

   All zero sparse: 1-by-1

2 个答案:

答案 0 :(得分:2)

考虑使用手动二进制到十进制转换的不同方法:

pows = pow2(size(BEpos,2)-1 : -1 : 0);
inds = uint32(BEpos*pows.')

我没有对此进行基准测试,但它可能比bin2dec和单元格数组更快。

如何运作

这很简单:2的幂被计算并存储在pows中(假设MSB位于最左边的位置)。然后将它们乘以匹配位置中的位并求和以产生相应的十进制值。

答案 1 :(得分:0)

尝试使用此索引:

inds = uint32( bin2dec(cellstr(num2str(BEpos,'%d'))) );