我在Matlab写一个模拟.我最终将运行这个模拟数百次.在每次模拟运行中,都有数百万个模拟周期.在每个循环中,我计算一个非常复杂的函数,需要~0.5秒才能完成.函数输入是一个长位数组(> 1000位) - 这是一个0和的数组1.我认为该位阵列中的一个矩阵0和1,并为他们中的每一个我仅运行该函数一旦-正如我保存的结果在不同的阵列(RES),并检查比特阵列是在基体中运行的功能的前:        
for i=1:1000000000
    %pick a bit array somehow
    [~,indx] = ismember(bit_array,bit_matrix,'rows');
    if indx == 0
        indx = length(results) + 1;
        bit_matrix(indx,:) = bit_array;
        res(indx) = complex_function(bit_array);
    end
    result = res(indx)
    %do something with result
end
我有两个问题,真的:
有没有更有效的方法来找到矩阵中的行的索引然后'ismember'?
由于我多次运行模拟,并且我得到的位数有很大的重叠,我想在运行之间缓存矩阵,这样我就不会在相同的位数组上重复计算函数再次.我怎么做?
如何生成所有可能的n位字符串组合?我需要以最快的方式生成20位字符串的所有组合.(我目前的实现是通过按位AND和右移操作完成的,但我正在寻找更快的技术).
我需要将位串存储在数组(或列表)中以获得相应的十进制数,例如 -
0 --> 0 0 0
1 --> 0 0 1
2 --> 0 1 0 ...等
任何的想法?
我正在float32用 numpy 的tofile().
float_num = float32(3.4353)
float_num.tofile('float_test.bin')
它可以用 numpy's 读取fromfile(),但这不符合我的需要,我必须在bitstring模块的帮助下将其作为原始二进制文件读取。
所以我执行以下操作:
my_file = open('float_test.bin', 'rb')
raw_data = ConstBitStream(my_file)
float_num_ = raw_data.readlist('float:32')
print float_num
print float_num_
输出:
3.4353
-5.56134659129e+32
可能是什么原因?第二个输出也应该是3.4353或关闭。
我正在尝试用更优雅的函数替换以下函数:
split_packet(_, <<>>) ->
    [];
split_packet(Size, P) when byte_size(P) < Size ->
    [ P ];
split_packet(Size, P) ->
    {Chunk, Rest} = split_binary(P, Size),
    [ Chunk | split_packet(Size, Rest) ].
(我现在这不是尾递归——想要保持简单,此外在新的 Erlang 版本中性能并不重要)
输出示例:
1> split_packet(3, <<1,2,3,4,5,6,7,8>>).
[<<1,2,3>>,<<4,5,6>>,<<7,8>>]
具有列表推导式的优雅解决方案将是更好的选择,因为其结果将使用列表推导式进一步处理,然后可以将其包装在一个推导式中。
我试过
[ X || <<X:Size/binary>> <= P ].
但如果 Size 不是以下的倍数,则会忽略最后一个块byte_site(P):
2>  [ X || <<X:3/binary>> <= <<1,2,3,4,5,6,7,8>> ].
[<<1,2,3>>,<<4,5,6>>]
我需要比特串的长度.我为它创建了这样的功能:
len( << Bitstr/bitstring >> ) ->
        len( Bitstr, 0 ).
len( << _X, Tail/bitstring >>, Len ) ->
        len( Tail, Len + 8 );
len( << _X:7, Tail/bitstring >>, Len ) ->
        len( Tail, Len + 7 );
len( << _X:6, Tail/bitstring >>, Len ) ->
        len( Tail, Len + 6 );
len( << _X:5, Tail/bitstring >>, Len ) ->
        len( Tail, Len + 5 );
len( << _X:4, Tail/bitstring >>, Len ) ->
        len( Tail, Len + 4 …我在这里找到了一个很好的资源( 比较SQL中的两个位掩码以查看是否有任何匹配 )用于在SQL数据库中进行搜索,在SQL数据库中使用位掩码存储具有多个属性的数据.但是,在示例中,所有数据都存储为int,而where子句似乎只适用于int.
是否有一种简单的方法可以将非常相似的测试用例转换为使用完整的位串?所以不是像下面这样的例子:
with test (id, username, roles)
AS
(
    SELECT 1,'Dave',1
    UNION SELECT 2,'Charlie',3
    UNION SELECT 3,'Susan',5
    UNION SELECT 4,'Nick',2
)
select * from test where (roles & 7) != 0 
而是有类似的东西:
with test (id, username, roles)
AS
(
    SELECT 1,'Dave',B'001'
    UNION SELECT 2,'Charlie',B'011'
    UNION SELECT 3,'Susan',B'101'
    UNION SELECT 4,'Nick',B'110'
)
select * from test where (roles & B'001') != 0 
我可以来回转换,但用实际的位串可视化更容易.对于我的简单转换(上面),我得到一个错误,操作符不适用于位串.还有另一种方法可以设置它吗?
我正在尝试连接位串
 cowboy_req:reply(
               200, #{<<"content-type">> => <<"text/html">>},
               <<"<div style='color:#FF0'>">> ++ cowboy_req:host(Req) ++ <<"</div>">> , 
               Req
    )
但由于++运营商的原因,它会产生运行时错 如何连接两个位串?
我如何在Elixir中查找子字符串是否与另一个位串一起出现?我需要验证位串X是否存在于位串Y中的某个位置以进行测试.使用现有功能有一种简单的方法吗?
x = "bar"
y = "foo bar baz"
some_substring_function(x, y)
与some_substring_function返回truthy值.
提前致谢!
我是正则表达的新手.
在我的一个作业问题中,我被要求写下面的正则表达式.
The set of all bit strings (i.e. strings over alphabet {0,1}) that are divisible by 4.
现在,我没有得到如何开始实现解决方案.如何找到可被4整除的位?