From Matlab to C++ Eigen matrix operations – vector normalization
将一些 Matlab 代码转换为 C .
问题(如何在 C 中):
在一个矩阵中连接两个向量。 (已经找到解决方案)
标准化每个数组(“pts” col)除以它的第三个值
1 和 2 的 Matlab 代码:
1
2 3 4 5 6 7 8 |
% 1. A 3×1 vector. d0, d1 double.
B = [d0*A (d0+d1)*A]; % B is 3×2 % 2. Normalize a set of 3D points |
1 和 2 的 C 代码:
1
2 3 4 5 6 7 8 9 |
// 1. Found the solution for that one!
B << d0*A, (d0 + d1)*A; // 2. |
编辑:
我希望这个问题现在更清楚了?2.
- 这就是 Eigen 的用途。你有什么问题?
- @Peter,问题是像我在matlab中那样在一行中填写B。我认为解决方案可能是 B << d0* (*A), (d0 d1)*(*A);但我还没有测试它。
- Matlab 是高级语言,C 是低级语言。您期望 Matlab 中的一行对应于 C 中的一行是不合理的。你在每个方面都有不同的优点和缺点。
- @Brick 是的,我知道。但是 Eigen 有很多处理矩阵的方法。我知道如何使用循环来解决这个问题,但我敢打赌 Eigen 可能有一个优化的方法来做到这一点。
- @Pedro77 我建议将您对我的最后评论放入问题中。我不会那样理解你的问题。 (我不是投反对票,但我可以理解为什么有人可能会像目前写的那样投反对票。根本不清楚你在问什么。)
- 同意,请让问题更清楚。可以执行的代码会有所帮助。
- 你为什么使用指针?
- @Bernhard 抱歉,除了 C 新手外,没有其他理由。打算更新那个。
- FWIW Armadillo 做了 Eigen 所做的事情,但也有明确的目标,即类似于 Matlab。我都使用并且喜欢两者,但比 Eigen 更频繁地使用犰狳。
对于#2:
1
|
C = C.array().rowwise() / C.row(2).array();
|
只有数组具有为行和列部分归约定义的乘法和除法运算符。当您将数组分配回 C
时,该数组将转换回矩阵
来源:https://www.codenong.com/42741074/