in core/src/main/scala/com/spotify/featran/FeatureSpec.scala [473:498]
def multiFeatureDimension(c: ARRAY): Array[Int] = {
require(n == c.length)
val sums = Array.fill[Int](dims)(0)
var i = 0
val maps = Array.fill(dims)(mutable.Map.empty[String, Int])
while (i < n) {
val f = features(i)
val size = f.unsafeFeatureDimension(c(i))
val tName = f.transformer.name
val idx = mapping(tName)
sums(idx) += size
if (crossings.keys.contains(tName)) {
maps(idx)(tName) = size
}
i += 1
}
var idx = 0
while (idx < dims) {
val m = maps(idx).withDefaultValue(0)
crossings.map.keys.foreach { case (n1, n2) =>
sums(idx) += m(n1) * m(n2)
}
idx += 1
}
sums
}