Valarray 切片数组与 'operator*' 不匹配

Posted

技术标签:

【中文标题】Valarray 切片数组与 \'operator*\' 不匹配【英文标题】:Valarray slice array no match for 'operator*'Valarray 切片数组与 'operator*' 不匹配 【发布时间】:2020-06-01 18:28:39 【问题描述】:

我正在尝试使用两个 valarray 进行多维点积,即返回一个 valarray,使得每个元素都是输入 valarray 的两行上的点积。

我使用切片按数组划分为行。检查文档,它指出 * 是 slice_array 的运算符,我相信我的工作方式类似于 * 到 valarrays。它在两个数组之间执行元素乘法。

valarray<float> mult(valarray<float> arr1, valarray<float> arr2, int row1, int mid, int col2)

    valarray<float> new_arr;
    new_arr.resize(row1*col2);
    for (int i = 0; i < row1*col2; ++i)
    
    slice s (i*mid,mid,1);
    new_arr[i] = (arr1[s] * arr2[s]).sum();
    

    return new_arr;

我不断收到的错误是: |12|error: no match for 'operator*' (operand types are 'std::slice_array&lt;float&gt;' and 'std::slice_array&lt;float&gt;')|

我不确定我做错了什么。在我制作自己的元素乘法函数之前,代码或我对 slice_array 的使用是否有任何错误?

【问题讨论】:

There's no operator* 您检查了哪些文档表明slice_arrayoperator * 【参考方案1】:

slice_array 的文档说接口是

template <class T> class slice_array 
public:
  /* Skipped for brevity */
  void operator*=  (const valarray<T>&) const;
;

换句话说,您可以将一个切片乘以valaray,但它没有说明将两个切片相乘。

【讨论】:

谢谢。这有点清楚了。我决定改用向量。

以上是关于Valarray 切片数组与 'operator*' 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以避免 valarray 和数组之间的复制吗?

valarray vs. vector:为啥要引入 valarray?

20.计算速度最快的valarray

std::valarray 和 std::array 有啥区别

go语言的数组与切片

Go 数组与切片