我已经实现了一个减去三个向量的函数,然后对它们的系数求和。之后,我想比较系数,但编译器显示错误。以下是我的代码:
<DataGrid x:Name="dg" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Width="*" />
<DataGridTextColumn Binding="{Binding Count}" Width="50" />
</DataGrid.Columns>
</DataGrid>
编译器显示的错误如下:
void update_embedding_test(Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer>* matrix_a, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer>* matrix_b, const int32 index_1, const int32 index_2, const int32 index_3, const int32 index_4, const int32 index_5, float* rate) {
auto v_1 = matrix_a->chip<0>(index_1); //get the first vector
auto v_2_a = matrix_b->chip<0>(index_2); //get the second vector
auto v_2_b = matrix_b->chip<0>(index_2); //get the third vector
auto v_3 = matrix_a->chip<0>(index_3); //get the fourth vector
auto v_4 = matrix_a->chip<0>(index_4); //get the fifth vector
auto v_5 = matrix_a->chip<0>(index_5); //get the sixth vector
auto sum_a = (v_1-v_3-v_2_a).sum(); //subtract the vectors and then sum the coefficients
auto sum_b = (v_4-v_5-v_2_b).sum(); //subtract the vectors and then sum the coefficients
std::cout << "sum_a: " << sum_a << "\n"; //e.g: -0.0268941
std::cout << "sum_b: " << sum_b << "\n\n"; //e.g: 0.0502871
if ((sum_a+1.f)>sum_b) { //compare the values
std::cout << "sum_a>sum_b\n";
}
}
如何比较In member function 'void tensorflow::NegTrainWord2vecOp::update_embedding_test(Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer>*, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer>*, tensorflow::int32, tensorflow::int32, tensorflow::int32, tensorflow::int32, tensorflow::int32, float*)':
word2vec_kernels.cc:725:20: error: could not convert 'Eigen::TensorBase<Derived, 0>::operator>(const OtherDerived&) const [with OtherDerived = Eigen::TensorReductionOp<Eigen::internal::SumReducer<float>, const Eigen::DimensionList<long int, 1ul>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, Eigen::MakePointer>; Derived = Eigen::TensorCwiseUnaryOp<Eigen::internal::bind2nd_op<Eigen::internal::scalar_sum_op<float, float> >, const Eigen::TensorReductionOp<Eigen::internal::SumReducer<float>, const Eigen::DimensionList<long int, 1ul>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, Eigen::MakePointer> >; typename Eigen::internal::traits<T>::Scalar = float](sum_b)' from 'const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_cmp_op<float, float, (Eigen::internal::ComparisonName)5u>, const Eigen::TensorCwiseUnaryOp<Eigen::internal::bind2nd_op<Eigen::internal::scalar_sum_op<float, float> >, const Eigen::TensorReductionOp<Eigen::internal::SumReducer<float>, const Eigen::DimensionList<long int, 1ul>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, Eigen::MakePointer> >, const Eigen::TensorReductionOp<Eigen::internal::SumReducer<float>, const Eigen::DimensionList<long int, 1ul>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_difference_op<float, float>, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, const Eigen::TensorChippingOp<0l, Eigen::TensorMap<Eigen::Tensor<float, 2, 1, long int>, 16, Eigen::MakePointer> > >, Eigen::MakePointer> >' to 'bool'
if ((sum_a+1.f)>sum_b) {
和sum_a
?
更新:问题不是计算sum_b
,而是将其放入if((sum_a+1.f)>sum_b
)。 link表示if((sum_a+1.f)>sum_b)
返回* this和other的系数方式==运算符的表达式。但问题仍然存在......如何将operator>()
放入(sum_a+1.f)>sum_b
声明?
答案 0 :(得分:0)
通过阅读文档,.sum()
的返回类型是DenseBase
对象。我们可以使用DenseBase
函数
isApprox
个对象
请参阅https://eigen.tuxfamily.org/dox/classEigen_1_1DenseBase.html#ae8443357b808cd393be1b51974213f9c