I think using the cardinality for this is actually not what you want. The cardinality is meant for properties that have more than one value. Customer addresses are a good example where that could make sense.
I can't find any references to that in the docs right now, but it should also be possible to define arrays as property types with JanusGraph. It should look like this if I remember it correctly: dataType(Float[].class).
TinkerPop now includes a
math() step which supports some mathematical functions. I haven't used that myself yet and you can use it for vector computations.
In general, if there is something you want to achieve with a graph traversal but there is not Gremlin step for that, then you can fall back to using lambdas which allow you to use basically everything Groovy / Java (or Python if you have enabled that on the server) can do.
Lambdas can also be used from Gremlin-Python which seems to be the GLV you are using.
Of course you have to decide for yourself whether it makes sense in general to do these computations as part of the graph traversal or whether you can also just retrieve the data and then do the computations in your application.