cb65174cf4
fixed rowwise/colswise mean/sum and implemented binomial_corssentrhopy. Next up is regression.
107 lines
2.8 KiB
C++
107 lines
2.8 KiB
C++
#pragma once
|
|
|
|
#include "./core/omp_config.h"
|
|
#include "detail/sub_serial.h"
|
|
|
|
|
|
namespace numerics{
|
|
|
|
// ---------------- Scalar ----------------
|
|
template <typename T>
|
|
inline void inplace_sub(utils::Matrix<T>& A, const T b) {
|
|
detail::inplace_sub_scalar_serial(A,b);
|
|
}
|
|
template <typename T>
|
|
inline void inplace_sub(const T b, utils::Matrix<T>& A) {
|
|
detail::inplace_sub_scalar_serial(b,A);
|
|
}
|
|
|
|
|
|
template <typename T>
|
|
inline utils::Matrix<T> sub(const utils::Matrix<T>& A, const T b) {
|
|
utils::Matrix<T> out = A;
|
|
inplace_sub(out, b);
|
|
return out;
|
|
}
|
|
template <typename T>
|
|
inline utils::Matrix<T> sub(const T b, const utils::Matrix<T>& A) {
|
|
utils::Matrix<T> out = A;
|
|
inplace_sub(b, out);
|
|
return out;
|
|
}
|
|
|
|
|
|
template <typename T>
|
|
inline void inplace_sub(utils::Vector<T>& v, const T b) {
|
|
detail::inplace_sub_scalar_serial(v,b);
|
|
}
|
|
template <typename T>
|
|
inline void inplace_sub(const T b, utils::Vector<T>& v) {
|
|
detail::inplace_sub_scalar_serial(b,v);
|
|
}
|
|
|
|
template <typename T>
|
|
inline utils::Vector<T> sub(const utils::Vector<T>& v, const T b) {
|
|
utils::Vector<T> out = v;
|
|
inplace_sub(out, b);
|
|
return out;
|
|
}
|
|
template <typename T>
|
|
inline utils::Vector<T> sub(const T b, const utils::Vector<T>& v) {
|
|
utils::Vector<T> out = v;
|
|
inplace_sub(b, out);
|
|
return out;
|
|
}
|
|
|
|
|
|
// ---------------- Elementwise ----------------
|
|
template <typename T>
|
|
inline void inplace_sub(utils::Matrix<T>& A, const utils::Matrix<T>& B) {
|
|
detail::inplace_sub_elementwise_serial(A,B);
|
|
}
|
|
|
|
template <typename T>
|
|
inline utils::Matrix<T> sub(const utils::Matrix<T>& A, const utils::Matrix<T>& B) {
|
|
utils::Matrix<T> out = A;
|
|
inplace_sub(out, B);
|
|
return out;
|
|
}
|
|
|
|
template <typename T>
|
|
inline void inplace_sub(utils::Vector<T>& v, const utils::Vector<T>& p) {
|
|
detail::inplace_sub_elementwise_serial(v,p);
|
|
}
|
|
|
|
template <typename T>
|
|
inline utils::Vector<T> sub(const utils::Vector<T>& v, const utils::Vector<T>& p) {
|
|
utils::Vector<T> out = v;
|
|
inplace_sub(out, p);
|
|
return out;
|
|
}
|
|
// ---------------- Rowwise ----------------
|
|
template <typename T>
|
|
inline void inplace_sub_rowwise(utils::Matrix<T>& A, const utils::Vector<T>& v) {
|
|
detail::inplace_sub_rowwise_serial(A,v);
|
|
}
|
|
|
|
template <typename T>
|
|
inline utils::Matrix<T> sub_rowwise(const utils::Matrix<T>& A, const utils::Vector<T>& v) {
|
|
utils::Matrix<T> out = A;
|
|
inplace_sub_rowwise(out, v);
|
|
return out;
|
|
}
|
|
|
|
// ---------------- Colwise ----------------
|
|
template <typename T>
|
|
inline void inplace_sub_colwise(utils::Matrix<T>& A, const utils::Vector<T>& v) {
|
|
detail::inplace_sub_colwise_serial(A,v);
|
|
}
|
|
|
|
template <typename T>
|
|
inline utils::Matrix<T> sub_colwise(const utils::Matrix<T>& A, const utils::Vector<T>& v) {
|
|
utils::Matrix<T> out = A;
|
|
inplace_sub_colwise(out, v);
|
|
return out;
|
|
}
|
|
|
|
} |