在c++中,如何在矩阵和向量之间进行点积
How can I do a dot product between a matrix and a vector in c++
有一个名为inner_product
的函数,但我在使用它时失败得很惨。对于不同的矩阵和向量,我需要多次使用这个函数。Bellow我当前的代码:
std::vector<vector<int>> matrix_a = {{0, 0},
{0, 1},
{1, 0},
{1, 1}};
std::vector<float> vector_b = {0.5, 0.8};
dot_produt(matrix_a, vettor_b);
float dot_produt(vector<vector<int>> e, vector<float> p){
return std::inner_product(std::begin(e), std::end(e), std::begin(p), 0.0);
}
过程如下:
(0.5 * 0) + (0.8 * 0) + (0.5 * 0) + (0.8 * 1)... ...
预期输出:
2.6
错误:
no match for 'operator*' (operand types are 'std::vector<int>' and 'float')
__init = __init + (*__first1 * *__first2);
您正试图使用指针来开始和结束一个向量的向量,inner_product
需要指向向量的开始和结束的指针。
此外,向量有自己的迭代器,您可以使用它们来代替std::begin
和std::end
。
实时演示
#include <iostream>
#include <numeric>
#include <vector>
//passing vectors by reference avoids unnecessary copies
double dot_produt(const std::vector<std::vector<int>> &e, const std::vector<float> &p)
{
double result = 0;
for (auto& v : e) //range based loop
result += std::inner_product(v.begin(), v.end(), p.begin(), 0.0);
return result;
}
int main()
{
std::vector<std::vector<int>> matrix_a = {{0, 0},
{0, 1},
{1, 0},
{1, 1}};
std::vector<float> vector_b = {0.5, 0.8};
std::cout << dot_produt(matrix_a, vector_b); //test print
}
输出:
2.6
相关文章:
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 在C++中查找两个向量之间最相似的值
- C++在 2 个向量向量之间交换向量
- p_threads初始化中向量和数组之间的区别
- 查找多个向量之间的公共元素(无整数元素)
- 在两个类实例之间共享向量
- C++向量:clear() 和 resize() 之间的区别
- 由 std::shared_ptr 向量指向的数据之间的线程同步
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- C 计算两个3D向量之间的角度(0至360)
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区
- C++:快速/并行计算两个"std::vector<double>"向量之间的L1距离
- 计算三个或更多向量之间的向量
- 如何在C++中找到两个向量之间的最小(优化)距离
- 列表和向量的索引之间的差异
- 如何在指定数据之间将数据从一个向量获取到另一个向量
- 编译器如何在向量vs Initializer_list之间做出决定
- 字符串和向量<string>元素之间的区别
- 在两个std::向量之间匹配元素
- 用整数密钥和向量的地图之间的差异