Browse Source

Merge pull request 'task01' (#9) from caojiyun24/uc-modern-cpp-student:master into master

test 1
master
PREScode 11 months ago
parent
commit
fe72d33474
2 changed files with 23 additions and 17 deletions
  1. +10
    -9
      cc/operators/ops.cc
  2. +13
    -8
      cc/operators/ops.h

+ 10
- 9
cc/operators/ops.cc View File

@@ -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)<epsilon);
}

float sigmoid(float x) {
// 请修改这里的return语句
return 0.0;
if(x>=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<float>& vec) -> float {
@@ -39,16 +40,16 @@ auto sumList(const std::vector<float>& vec) -> float {

auto prodList(const std::vector<float>& vec) -> float {
// 请修改这里的return语句
return 0.0f;
return reduce(vec, 1.0f, mul<float>);
}

auto addLists(const std::vector<float>& vec1, const std::vector<float>& vec2) -> std::vector<float> {
// 请修改这里的return语句
return std::vector<float>(1, 0.0f);
return zipWith(vec1, vec2, add<float>);
}

auto negList(const std::vector<float>& vec) -> std::vector<float> {
// 请修改这里的return语句
return std::vector<float>(1, 0.0f);
return map(vec,neg<float>);
}
}

+ 13
- 8
cc/operators/ops.h View File

@@ -15,32 +15,32 @@ T mul(T a, T b) {

template<typename T>
T id(T a) {
return 0; // 请修改这里的return语句
return a; // 请修改这里的return语句
}

template<typename T>
T add(T a, T b) {
return 0; // 请修改这里的return语句
return a+b; // 请修改这里的return语句
}

template<typename T>
T neg(T a) {
return 0; // 请修改这里的return语句
return -a; // 请修改这里的return语句
}

template<typename T>
float lt(T a, T b) {
return 0.0; // 请修改这里的return语句
return (float)(a<b); // 请修改这里的return语句
}

template<typename T>
float eq(T a, T b) {
return 0.0; // 请修改这里的return语句
return (float)(a==b); // 请修改这里的return语句
}

template<typename T>
T max(T a, T b) {
return 0; // 请修改这里的return语句
return a>b?a:b; // 请修改这里的return语句
}

template<typename T, typename F>
@@ -57,16 +57,21 @@ auto map(const std::vector<T>& vec, F func) -> std::vector<decltype(func(std::de
template <typename T1, typename T2, typename F>
auto zipWith(const std::vector<T1>& vec1, const std::vector<T2>& vec2, F func)
-> std::vector<decltype(func(std::declval<T1>(), std::declval<T2>()))> {

using ResultType = decltype(func(std::declval<T1>(),std::declval<T2>()));
std::vector<ResultType> 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<vec1.size();++i){
result.push_back(func(vec1[i],vec2[i]));
}
// 请在这里补全其他部分
// 提醒:可以使用push_back函数向vector添加元素
// 再给你降一点难度:这里需要仿照map函数神明一个result变量。

return std::vector<decltype(func(std::declval<T1>(), std::declval<T2>()))>(1); // 这里记得改掉,改成result
return result; // 这里记得改掉,改成result
}

template<typename T, typename F>


Loading…
Cancel
Save