You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ops.h 2.4 kB

11 months ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma once
  2. #include <cmath>
  3. #include <functional>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <stdexcept>
  7. #include <numeric>
  8. namespace operators {
  9. template<typename T>
  10. T mul(T a, T b) {
  11. return a * b; // 请修改这里的return语句
  12. }
  13. template<typename T>
  14. T id(T a) {
  15. return 0; // 请修改这里的return语句
  16. }
  17. template<typename T>
  18. T add(T a, T b) {
  19. return 0; // 请修改这里的return语句
  20. }
  21. template<typename T>
  22. T neg(T a) {
  23. return 0; // 请修改这里的return语句
  24. }
  25. template<typename T>
  26. float lt(T a, T b) {
  27. return 0.0; // 请修改这里的return语句
  28. }
  29. template<typename T>
  30. float eq(T a, T b) {
  31. return 0.0; // 请修改这里的return语句
  32. }
  33. template<typename T>
  34. T max(T a, T b) {
  35. return 0; // 请修改这里的return语句
  36. }
  37. template<typename T, typename F>
  38. auto map(const std::vector<T>& vec, F func) -> std::vector<decltype(func(std::declval<T>()))> {
  39. std::vector<decltype(func(std::declval<T>()))> result;
  40. result.reserve(vec.size());
  41. std::transform(vec.begin(), vec.end(), std::back_inserter(result), func);
  42. return result;
  43. }
  44. template <typename T1, typename T2, typename F>
  45. auto zipWith(const std::vector<T1>& vec1, const std::vector<T2>& vec2, F func)
  46. -> std::vector<decltype(func(std::declval<T1>(), std::declval<T2>()))> {
  47. if (vec1.size() != vec2.size()) {
  48. // 我们已经在这里throw一个异常
  49. throw std::invalid_argument("Vectors must have the same size");
  50. }
  51. // 请在这里补全其他部分
  52. // 提醒:可以使用push_back函数向vector添加元素
  53. // 再给你降一点难度:这里需要仿照map函数神明一个result变量。
  54. return std::vector<decltype(func(std::declval<T1>(), std::declval<T2>()))>(1); // 这里记得改掉,改成result
  55. }
  56. template<typename T, typename F>
  57. auto reduce(const std::vector<T>& vec, T init, F func) -> T {
  58. return std::accumulate(vec.begin(), vec.end(), init, func);
  59. }
  60. float is_close(float x, float y);
  61. float sigmoid(float x);
  62. float relu(float x);
  63. float inv(float x);
  64. float inv_back(float x, float d);
  65. float relu_back(float x, float d);
  66. auto sumList(const std::vector<float>& vec) -> float;
  67. auto prodList(const std::vector<float>& vec) -> float;
  68. auto addLists(const std::vector<float>& vec1, const std::vector<float>& vec2) -> std::vector<float>;
  69. auto negList(const std::vector<float>& vec) -> std::vector<float>;
  70. }

计算机大作业