From 0da7d8fd7e3c4cfa7f7097782e1ce1e08999ddd2 Mon Sep 17 00:00:00 2001 From: caojiyun24 Date: Mon, 7 Jul 2025 21:22:35 +0800 Subject: [PATCH] task01 --- cc/operators/ops.cc | 19 ++++++++++--------- cc/operators/ops.h | 21 +++++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/cc/operators/ops.cc b/cc/operators/ops.cc index 36890b9..c256d95 100644 --- a/cc/operators/ops.cc +++ b/cc/operators/ops.cc @@ -5,32 +5,33 @@ static float epsilon = 1e-6; float is_close(float x, float y) { // 请修改这里的return语句 - return 0.0; + return (float)(abs(x-y)=0) return 1.0/(1.0+exp(-x)); + else return exp(x)/(1.0+exp(x)); } float relu(float x) { // 请修改这里的return语句 - return 0.0; + return x>0.0?x:0.0; } float inv(float x) { // 请修改这里的return语句 - return 0.0; + return 1.0/x; } float inv_back(float x, float d) { // 请修改这里的return语句 - return 0.0; + return -d/(x*x); } float relu_back(float x, float d) { // 请修改这里的return语句 - return 0.0; + return x>0.0?d*1.0:0.0; } auto sumList(const std::vector& vec) -> float { @@ -39,16 +40,16 @@ auto sumList(const std::vector& vec) -> float { auto prodList(const std::vector& vec) -> float { // 请修改这里的return语句 - return 0.0f; + return reduce(vec, 1.0f, mul); } auto addLists(const std::vector& vec1, const std::vector& vec2) -> std::vector { // 请修改这里的return语句 - return std::vector(1, 0.0f); + return zipWith(vec1, vec2, add); } auto negList(const std::vector& vec) -> std::vector { // 请修改这里的return语句 - return std::vector(1, 0.0f); + return map(vec,neg); } } diff --git a/cc/operators/ops.h b/cc/operators/ops.h index 3483526..bdf0a89 100644 --- a/cc/operators/ops.h +++ b/cc/operators/ops.h @@ -15,32 +15,32 @@ T mul(T a, T b) { template T id(T a) { - return 0; // 请修改这里的return语句 + return a; // 请修改这里的return语句 } template T add(T a, T b) { - return 0; // 请修改这里的return语句 + return a+b; // 请修改这里的return语句 } template T neg(T a) { - return 0; // 请修改这里的return语句 + return -a; // 请修改这里的return语句 } template float lt(T a, T b) { - return 0.0; // 请修改这里的return语句 + return (float)(a float eq(T a, T b) { - return 0.0; // 请修改这里的return语句 + return (float)(a==b); // 请修改这里的return语句 } template T max(T a, T b) { - return 0; // 请修改这里的return语句 + return a>b?a:b; // 请修改这里的return语句 } template @@ -57,16 +57,21 @@ auto map(const std::vector& vec, F func) -> std::vector auto zipWith(const std::vector& vec1, const std::vector& vec2, F func) -> std::vector(), std::declval()))> { - + using ResultType = decltype(func(std::declval(),std::declval())); + std::vector result; if (vec1.size() != vec2.size()) { // 我们已经在这里throw一个异常 throw std::invalid_argument("Vectors must have the same size"); } + result.reverse(vec1.size()); + for(size_t i=0;i(), std::declval()))>(1); // 这里记得改掉,改成result + return result; // 这里记得改掉,改成result } template