gpt4 book ai didi

c++ - 如何在 C++ 中做矩阵和 vector 之间的点积

转载 作者:行者123 更新时间:2023-12-03 07:01:02 24 4
gpt4 key购买 nike

有一个名为inner_product 的函数,但我在使用它时惨遭失败。对于不同的矩阵和 vector ,我需要多次使用这个函数。下面是我当前的代码:

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);

最佳答案

您正在尝试使用指向 vector vector 的开始和结束的指针,inner_product 需要指向 vector 开始和结束的指针。

此外, vector 有自己的迭代器,您可以使用它们代替 std::beginstd::end

Live demo

#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

关于c++ - 如何在 C++ 中做矩阵和 vector 之间的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61645527/

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