【问题标题】:Bitwise operations on Armadillo vectors犰狳向量的按位运算
【发布时间】:2015-03-13 14:20:00
【问题描述】:

我需要在两个向量之间进行按位运算。我不想使用循环。 我正在使用犰狳。谁能帮我解决这个问题?

编辑:

向量是指由犰狳库提供的向量模板。像这样的:

urowvec newvec1 = 零 (5);

urowvec newvec2 = 个 (5);

urowvec newvec3 = newvec1 | newvec2;

但这给了我犰狳的错误。

谢谢

【问题讨论】:

  • 你到底是什么意思?在最低级别,每个计算都是按位计算的。
  • 我不是指最低级别。我说的是在两个向量上执行的逻辑按位运算,如 AND、OR 等。

标签: c++ linear-algebra armadillo


【解决方案1】:

如果你实现这个:

inline urowvec operator|(const urowvec& lhs, urowvec& rhs){
  // ToDo - operate on an element by element basis, and return
  // a urowvec. Decide on something reasonable if the vectors
  // differ in size.
}

并确保它包含在每个需要运算符的编译单元中,然后urowvec newvec3 = newvec1 | newvec2; 有效。

您可以对其他位运算符执行相同的操作。

任何合理的编译器都会删除值副本。

【讨论】:

  • 谢谢。是否也可以使用 SIMD 命令加快按位运算?例如,如果我可以一次对整个向量(或其中的一部分)进行操作,而不是进行元素操作。
【解决方案2】:

使用位运算符进行位运算

 |   bitwise or
 &   bitwise and
 ^   bitwise xor
 ~   bitwise not
<<  bitwise shift left
>>  bitwise shift right

如果您提出更具体的问题,您可能会得到更具体的答案。向量是指 std::vector,它是整数向量吗?还是您的意思是一组位?

【讨论】:

  • 我已经编辑了我的问题。希望说明清楚。
  • 我不能直接对犰狳向量使用按位运算
  • 这里也一样。布尔运算符不适用于犰狳类型。试试这个,ucube a = zeros(3,3,3); a(1,1,1) ^= 1;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多