考虑两个矢量,甲和乙,大小的Ñ,7 <= Ñ <= 23,这两个甲和乙仅由-1s,0和1.
我需要一个快速算法来计算A和B的内积.
到目前为止,我已经考虑过uint32_t使用以下编码将符号和值存储在单独的s中:
我想到的C++实现如下所示:
struct ternary_vector {
uint32_t sign, value;
};
int inner_product(const ternary_vector & a, const ternary_vector & b) {
uint32_t psign = a.sign ^ b.sign;
uint32_t pvalue = a.value & b.value;
psign &= pvalue;
pvalue ^= psign;
return __builtin_popcount(pvalue) - __builtin_popcount(psign);
}
Run Code Online (Sandbox Code Playgroud)
这种方法运行得相当不错,但我不确定是否可以做得更好.对此事的任何评论都非常感谢.
你能否建议对roundMatlab函数进行微分近似?
该round函数如下所示:

我想要一个可微分的函数,它与[图中的]类似.