当前位置: 首页 > 知识库问答 >
问题:

小于等于和布尔向量

寇坚成
2023-03-14

我用以下方式解决了一个问题:

//cube_potentials is float8
//level_vec is float8
//shift_vec is int8 and contains (non-overlapping) bit shifts
int8 shifts = (cube_potentials<=level_vec);
int flag_index = 0;\n"
if (shifts.s0) flag_index |= shift_vec.s0;
if (shifts.s1) flag_index |= shift_vec.s1;
if (shifts.s2) flag_index |= shift_vec.s2;
if (shifts.s3) flag_index |= shift_vec.s3;
if (shifts.s4) flag_index |= shift_vec.s4;
if (shifts.s5) flag_index |= shift_vec.s5;
if (shifts.s6) flag_index |= shift_vec.s6;
if (shifts.s7) flag_index |= shift_vec.s7;

它起作用了。问题是所有这些if语句都让我厌烦,我也无法想象它们是世界上最快的东西。我想这样解决它:

//Method 1
bool8 less = (bool8)(cube_potentials<=level_vec);
int8 shifts = (int8)(less) * shift_vec;
int flag_index = shifts.s0 | shifts.s1 | shifts.s2 | shifts.s3 | shifts.s4 | shifts.s5 | shifts.s6 | shifts.s7;

//Method 2 (more simply)
int8 shifts = ((int8)(cube_potentials<=level_vec)) * shift_vec;
int flag_index = shifts.s0 | shifts.s1 | shifts.s2 | shifts.s3 | shifts.s4 | shifts.s5 | shifts.s6 | shifts.s7;

问题是bool8是一个保留类型,而不是一个真正的类型,所以方法1已经过时了。然而,方法2不能正确工作。我怀疑原因与它的第一行有关。这

我的问题是,是否有任何方法可以以更干净、更并行的方式重写原始代码?

谢谢,

共有2个答案

卫财
2023-03-14

编辑:确定,第二次尝试:

flag_index = dot(shift_vecs, -islessequal(cube_potentials, level_vec));

不过,我想要一个好的评论。

    < Li > < code > isles equal()应为true和false返回-1或0。 < li >我们取反得到1或0 < li >然后,我们使用点积对shift_vecs中返回true的分量求和。

笔记:

  • dot()通常是硬件指令,所以应该很快。
  • 替换为

施赞
2023-03-14

试试这个。它可能会起作用:

// gives -1 (0xFFFFFFFF) or 0 for when T or F for each comparison:
int8 shifts = cube_potentials <= level_vec;

// leaves only the elements that passed the above compare:
shift_vec &= shifts;

// start combining (with all 8 elements):
shift_vec.lo |= shift_vec.hi;

// keep going (down to the bottom 4):
shift_vec.lo.lo |= shift_vec.lo.hi;

// last one (only considering the bottom two):
int flag_index = shift_vec.lo.lo.lo |= shift_vec.lo.lo.hi;
 类似资料:
  • 问题是: 我们将“根到叶路径”定义为树中的任意节点序列,从根节点开始向下延伸到叶。该路径的“根到叶路径和”是沿该路径的所有节点(包括根)的和。定义一个空树,使其不包含根到叶的路径(因此其和为零)。定义一个具有一个节点的树,使其根到叶的路径仅由根组成(因此其总和是根的值)。给定一个二叉树和一个值“sum”,如果该树有一些根到叶的路径,使得沿路径的所有值相加等于“sum”,则返回true。如果找不到这

  • 我目前正在Codecademy上学习JavaScript,我遇到了一些问题。我在一个叫做“建造石头,布,剪刀”的部分,有一个部分有一个条件,如果数学。random()大于0.33小于0.66,计算机将选择纸张。我的问题是,如何建立一个if条件,即某个东西大于X,但同时小于Y?

  • 标题说明了一切。我的问题是关于不同的字符串等价方法的效率。我经常使用<代码>。equalsIgnoreCase(String str),因为我对它很有兴趣。但我开始怀疑这是否是寻找字符串之间等价性的最有效方法。在我看来,正在调用一种大小写转换方法或,然后在其定义中调用,但我可能错了。那么,以下哪种方法在以下情况或任何情况下更有效?

  • 我知道一个O(n2)soln,它能以更好的方式实现吗,因为数组中元素的数量限制非常大

  • 我正在尝试对驻留在elastic中的数据执行4个操作。精确匹配(等于),包含,小于,大于。elastic中有两个选项,即query和filter,据我所知,这两个选项的作用相同,但query计算的分数与数据条件值关系最匹配。 我想做的是简单的过滤或查询(我很困惑,他们网站上提到的方式) 精确匹配,如或或 包含类似name Contains或email Contains 大于like

  • 我可以搜索eqaul到k之和的子数组中的正数,但下面的代码无法搜索数组中的负数。对于数组中的负数和正数,有没有找到给定和的子数组的算法? 例如,{10,2,-2,-20,10},在这个数组中查找sum为-10的子数组。子数组在这种情况下是{-20,10}。