51 template<
typename dtypeIn1,
typename dtypeIn2,
typename Function,
typename... AdditionalFunctionArgs>
54 const Function& function,
55 const AdditionalFunctionArgs&&... additionalFunctionArgs)
64 [&function, &additionalFunctionArgs...](
const auto& inValue1,
const auto& inValue2) -> dtypeIn1
66 return function(inValue1,
68 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
73 const auto value = inArray2.
item();
78 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeIn1
79 { return function(inValue, value, std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...); });
81 else if (inArray2.
isflat())
87 const auto value = inArray2[row];
92 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeIn1
94 return function(inValue,
96 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
104 const auto value = inArray2[col];
109 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeIn1
111 return function(inValue,
113 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
141 template<
typename dtypeOut,
145 typename... AdditionalFunctionArgs>
148 const Function& function,
149 const AdditionalFunctionArgs&&... additionalFunctionArgs)
153 return [&inArray1, &inArray2, &function, &additionalFunctionArgs...]
161 [&function, &additionalFunctionArgs...](
const auto& inValue1,
const auto& inValue2) -> dtypeOut
163 return function(inValue1,
165 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
173 const auto value = inArray1.
item();
174 return [&inArray2, &value, &function, &additionalFunctionArgs...]
181 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeOut
183 return function(inValue,
185 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
192 const auto value = inArray2.
item();
193 return [&inArray1, &value, &function, &additionalFunctionArgs...]
200 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeOut
202 return function(inValue,
204 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
211 return [&inArray1, &inArray2, &function, &additionalFunctionArgs...]
220 for (
uint32 col = 0; col < inArray2.numCols(); ++col)
222 returnArray(row, col) =
223 function(inArray1[row],
225 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
231 for (
uint32 row = 0; row < inArray2.numRows(); ++row)
235 returnArray(row, col) =
236 function(inArray1[col],
238 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
245 else if (inArray1.
isflat())
247 return broadcaster<dtypeOut>(inArray2,
250 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
252 else if (inArray2.
isflat())
256 return [&inArray1, &inArray2, &function, &additionalFunctionArgs...]
261 const auto value = inArray2[row];
265 returnArray.
begin(row),
266 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeOut
268 return function(inValue,
270 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
278 return broadcaster<dtypeOut>(inArray1.
transpose(),
281 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...)
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition: Error.hpp:37
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition: NdArrayCore.hpp:139
const_iterator cbegin() const noexcept
Definition: NdArrayCore.hpp:1365
const_column_iterator ccolbegin() const noexcept
Definition: NdArrayCore.hpp:1442
self_type transpose() const
Definition: NdArrayCore.hpp:4963
bool isflat() const noexcept
Definition: NdArrayCore.hpp:3025
size_type numCols() const noexcept
Definition: NdArrayCore.hpp:3545
column_iterator colbegin() noexcept
Definition: NdArrayCore.hpp:1392
const Shape & shape() const noexcept
Definition: NdArrayCore.hpp:4591
size_type numRows() const noexcept
Definition: NdArrayCore.hpp:3557
const_iterator cend() const noexcept
Definition: NdArrayCore.hpp:1673
iterator begin() noexcept
Definition: NdArrayCore.hpp:1315
bool isscalar() const noexcept
Definition: NdArrayCore.hpp:3036
value_type item() const
Definition: NdArrayCore.hpp:3102
const_column_iterator ccolend() const noexcept
Definition: NdArrayCore.hpp:1827
Definition: NdArrayBroadcast.hpp:39
NdArray< dtypeIn1 > & broadcaster(NdArray< dtypeIn1 > &inArray1, const NdArray< dtypeIn2 > &inArray2, const Function &function, const AdditionalFunctionArgs &&... additionalFunctionArgs)
Definition: NdArrayBroadcast.hpp:52
OutputIt transform(InputIt first, InputIt last, OutputIt destination, UnaryOperation unaryFunction)
Definition: StlAlgorithms.hpp:776
std::uint32_t uint32
Definition: Types.hpp:40
NdArray< dtype > max(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition: max.hpp:44