gpt4 book ai didi

c++ - 如何在 C++ 中执行 Y = aX + Y

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:12 25 4
gpt4 key购买 nike

我正在尝试使用 C++ STL 容器进行矩阵运算。有两个大小为 m,n(m>n) 的 vector Y 和 X。我想将 X 与标量相乘并从 Y 中的给定索引添加它。在此过程中我不想转换 X(不想使用 std::transform)。实际上,X 是矩阵 DPtr 中的列。下面给出了我试过的一个版本。

    std::vector<double> D(&DPtr[index1],&DPtr[index1]+size_C);

std::transform(D.begin(), D.end(), D.begin(),std::bind2nd(std::multiplies<double>(), val1*val2));

std::transform (D.begin(), D.end(), YPtr.begin()+index2, YPtr.begin()+index2, std::plus<double>());

我正在尝试将列复制到一个临时 vector 中并对其进行操作。

有人可以帮助我以一种更简单的方式重写代码,而无需将列复制到另一个 vector 中吗?

我猜我必须使用 std::for_each 和 lamda 表达式或函数调用?但我是 C++ 的新手?

只是为了给个线索,我想把它写成

std::for_each(YPtr.begin()+index2,YPtr.begin()+index2+(size_c-1),scalarAdd);

使用函数 scalarAdd 或任何我可以直接访问 DPtr 的 lamda 表达式。我也可以写

YPtr.begin()+index2+(size_c-1)
.

作为第二个参数。它有效吗?还想象一下,我将矩阵制作为 C++ vector ,其中 DPtr 矩阵的所有列都存储在一个 C++ vector D 中。

Visual Representation of my question

最佳答案

我可以建议您使用专用的线性代数库,例如 Eigen ?有了它,您可以简单地编写 Y += X * a,库和编译器将为您找出最佳实现。


由于您使用的是 C++11,您可以将 std::transform 与 lambda 一起使用(不推荐使用 std::for_each,因为您需要转换你的 Y)。

std::transform(DPtr.begin() + index1, DPtr.begin() + index1 + size_c, // X
YPtr.begin() + index2, // Y_in
YPtr.begin() + index2, // Y_out
[](double x, double y_in) { return a*x + y_in; });
// y_out = a*x + y_in, for every entry.

关于c++ - 如何在 C++ 中执行 Y = aX + Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39505037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com