9 #ifndef MCL_POINTWISE_H
10 #define MCL_POINTWISE_H
24 std::vector<T>
Add(
const std::vector<T>& vector_a,
25 const std::vector<T>& vector_b) noexcept {
26 ASSERT(vector_a.size() == vector_b.size());
28 std::vector<T> output((
Int)vector_a.size());
29 for (
Int i=0; i<(
Int)vector_a.size(); ++i) {
30 output[i] = vector_a[i]+vector_b[i];
35 void Add(
const Real* input_data_a,
36 const Real* input_data_b,
38 Real* output_data) noexcept;
42 inline std::vector<Real>
Add(
const std::vector<Real>& vector_a,
43 const std::vector<Real>& vector_b) noexcept {
44 ASSERT(vector_a.size() == vector_b.size());
46 std::vector<Real> output((
Int)vector_a.size());
47 Add(vector_a.data(), vector_b.data(), (
Int)vector_a.size(),
54 std::vector<T>
Opposite(
const std::vector<T>& vector) noexcept {
59 std::vector<T> output(vector.size());
60 for (
Int i=0; i<(
Int)vector.size(); ++i) { output[i] = -vector[i]; }
66 std::vector<Real>
Inverse(
const std::vector<Real>& vector) noexcept;
73 std::vector<T>
Subtract(
const std::vector<T>& vector_a,
74 const std::vector<T>& vector_b) noexcept {
84 std::vector<T>
Multiply(
const std::vector<T>& vector_a,
85 const std::vector<T>& vector_b) noexcept {
86 ASSERT(vector_a.size() == vector_b.size());
88 std::vector<T> output((
Int)vector_a.size());
89 for (
Int i=0; i<(
Int)vector_a.size(); ++i) {
90 output[i] = vector_a[i]*vector_b[i];
96 Int num_samples,
Real* output_data) noexcept;
100 inline std::vector<Real>
Multiply(
const std::vector<Real>& vector_a,
101 const std::vector<Real>& vector_b) noexcept {
102 ASSERT(vector_a.size() == vector_b.size());
104 std::vector<Real> output((
Int)vector_a.size());
105 Multiply(vector_a.data(), vector_b.data(), (
Int)vector_a.size(),
115 std::vector<T>
Divide(
const std::vector<T>& vector_a,
116 const std::vector<T>& vector_b) noexcept {
117 ASSERT(vector_a.size() == vector_b.size());
118 std::vector<T> output((
Int)vector_a.size());
119 for (
Int i=0; i<(
Int)vector_a.size(); ++i) {
120 output[i] = vector_a[i]/vector_b[i];
128 std::vector<T>
Exp(
const std::vector<T>& vector) noexcept {
129 Int n(vector.size());
130 std::vector<T> output(vector.size());
131 for (
Int i=0; i<n; ++i) { output[i] = exp(vector[i]); }
141 std::vector<Complex>
Conj(
const std::vector<Complex>& vector) noexcept;
148 std::vector<Real>
RealPart(
const std::vector<Complex>& input) noexcept;
151 std::vector<Real>
Imag(
const std::vector<Complex>& input) noexcept;
158 std::vector<Real>
Pow(
const std::vector<Real>& vector,
159 Real exponent) noexcept;
163 std::vector<Real>
Abs(
const std::vector<Real>& input) noexcept;
166 std::vector<Real>
Abs(
const std::vector<Complex>& input) noexcept;
169 std::vector<Real>
HalfWave(
const std::vector<Real>& vector) noexcept;
172 std::vector<Real>
Cos(
const std::vector<Real>& vector) noexcept;
175 std::vector<Real>
Sin(
const std::vector<Real>& vector) noexcept;
181 std::vector<Real>
Log(
const std::vector<Real>& vector) noexcept;
187 std::vector<Real>
Log10(
const std::vector<Real>& vector) noexcept;
189 std::vector<Int>
ConvertToInt(
const std::vector<UInt>& vector) noexcept;