我正在尝试使用两个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<float>' and 'std::slice_array<float>')|
我不确定我在做什么错。在制作自己的逐元素乘法函数之前,代码或我对slice_array的使用是否存在任何错误?
slice_array
的文档说接口是
template <class T> class slice_array {
public:
/* Skipped for brevity */
void operator*= (const valarray<T>&) const;
};
换句话说,您可以将一个切片与一个valaray
相乘,但是它并没有说明将两个切片相乘。