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();
74 stl_algorithms::transform(
78 [&value, &function, &additionalFunctionArgs...](const auto& inValue) -> dtypeIn1
79 { return function(inValue, value, std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...); });
81 else if (inArray2.isflat())
83 if (inArray2.numRows() > 1 && inArray2.numRows() == inArray1.numRows())
85 for (
uint32 row = 0; row < inArray1.numRows(); ++row)
87 const auto value = inArray2[row];
92 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeIn1
94 return function(inValue,
96 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...);
100 else if (inArray2.numCols() > 1 && inArray2.numCols() == inArray1.numCols())
102 for (
uint32 col = 0; col < inArray1.numCols(); ++col)
104 const auto value = inArray2[col];
106 inArray1.ccolbegin(col),
107 inArray1.ccolend(col),
108 inArray1.colbegin(col),
109 [&value, &function, &additionalFunctionArgs...](
const auto& inValue) -> dtypeIn1
111 return function(inValue,
113 std::forward<AdditionalFunctionArgs>(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...]
213 const auto numRows = std::max(inArray1.
numRows(), inArray2.numRows());
214 const auto numCols = std::max(inArray1.
numCols(), inArray2.numCols());
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())
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)...);
281 std::forward<AdditionalFunctionArgs>(additionalFunctionArgs)...)