2

我正在尝试使用 BEpos 和 BEneg 等键访问稀疏 mlf,其中每行一个键。现在的问题是大多数命令并不意味着处理太大的输入:bin2dec 需要没有空格的干净二进制数,但 regexp hack 无法处理太多行——等等。

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

例子

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
4

2 回答 2

2

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

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

我没有对此进行基准测试,但它可能比bin2dec单元阵列更快。

这个怎么运作

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

于 2013-10-28T08:30:10.317 回答
0

尝试用这个索引:

inds = uint32( bin2dec(cellstr(num2str(BEpos,'%d'))) );
于 2013-10-28T06:45:40.280 回答