Functions that applies to a single element can work on a whole tensor similar to Numpy’s universal functions.
3 functions exist: makeUniversal
, makeUniversalLocal
and
map
.
makeUniversal
create a a function that applies to each element of a
tensor from any unary function. Most functions from the math
module
have been generalized to tensors with makeUniversal(sin)
.
Furthermore those universal functions are exported and available for
import.
makeUniversalLocal
does not export the universal functions.
map
is more generic and map any function to all element of a tensor.
map
works even if the function changes the type of the tensor’s
elements.
echo foo.map(x => x.isPowerOfTwo) # map a function (`=>` comes from the future module )
# Tensor of shape 5x5 of type "bool" on backend "Cpu"
# |true true true true true|
# |true true true true true|
# |false false false false false|
# |true true true true true|
# |false false false false false|
let foo_float = foo.map(x => x.float)
echo ln foo_float # universal function (convert first to float for ln)
# Tensor of shape 5x5 of type "float" on backend "Cpu"
# |0.0 0.0 0.0 0.0 0.0|
# |0.6931471805599453 1.386294361119891 2.079441541679836 2.772588722239781 3.465735902799727|
# |1.09861228866811 2.19722457733622 3.295836866004329 4.394449154672439 5.493061443340548|
# |1.386294361119891 2.772588722239781 4.158883083359671 5.545177444479562 6.931471805599453|
# |1.6094379124341 3.218875824868201 4.828313737302302 6.437751649736401 8.047189562170502|