diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-01-21 13:58:39 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-01-21 14:04:56 +0100 |
commit | f5803f3537919f7a81be9095cc4eec8a830e3ae4 (patch) | |
tree | c19e6f26817eb5381d9c16ddd15dc7882f39597b /vespajlib/src | |
parent | 965a96d30aa606b70ce37767f7922cd8809b0ba3 (diff) |
- Use get(key) instead of containsKey to avoid extra lookup.
- Enough to use only array[long] and convert directly. No need to create temporary TensorAddress.
Diffstat (limited to 'vespajlib/src')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java b/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java index 30dd1d6dc29..55fb4af551e 100644 --- a/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java +++ b/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java @@ -3,6 +3,7 @@ package com.yahoo.tensor; import com.google.common.collect.ImmutableMap; +import com.yahoo.tensor.impl.NumericTensorAddress; import com.yahoo.tensor.impl.StringTensorAddress; import java.util.ArrayList; @@ -326,10 +327,12 @@ public class MixedTensor implements Tensor { } private double[] denseSubspace(TensorAddress sparseAddress) { - if (!denseSubspaceMap.containsKey(sparseAddress)) { - denseSubspaceMap.put(sparseAddress, new double[(int)denseSubspaceSize()]); + double [] values = denseSubspaceMap.get(sparseAddress); + if (values == null) { + values = new double[(int)denseSubspaceSize()]; + denseSubspaceMap.put(sparseAddress, values); } - return denseSubspaceMap.get(sparseAddress); + return values; } public IndexedTensor.DirectIndexBuilder denseSubspaceBuilder(TensorAddress sparseAddress) { @@ -520,7 +523,7 @@ public class MixedTensor implements Tensor { return builder.build(); } - private TensorAddress denseOffsetToAddress(long denseOffset) { + private long[] denseOffsetToAddress(long denseOffset) { if (denseOffset < 0 || denseOffset > denseSubspaceSize) { throw new IllegalArgumentException("Offset out of bounds"); } @@ -538,17 +541,17 @@ public class MixedTensor implements Tensor { labels[i] = restSize / innerSize; restSize %= innerSize; } - return TensorAddress.of(labels); + return labels; } TensorAddress fullAddressOf(TensorAddress sparsePart, long denseOffset) { - TensorAddress densePart = denseOffsetToAddress(denseOffset); + long [] densePart = denseOffsetToAddress(denseOffset); String[] labels = new String[type.dimensions().size()]; int mappedIndex = 0; int indexedIndex = 0; for (TensorType.Dimension d : type.dimensions()) { if (d.isIndexed()) { - labels[mappedIndex + indexedIndex] = densePart.label(indexedIndex); + labels[mappedIndex + indexedIndex] = NumericTensorAddress.asString(densePart[indexedIndex]); indexedIndex++; } else { labels[mappedIndex + indexedIndex] = sparsePart.label(mappedIndex); @@ -607,8 +610,7 @@ public class MixedTensor implements Tensor { b.append(", "); // start brackets - for (int i = 0; i < indexes.nextDimensionsAtStart(); i++) - b.append("["); + b.append("[".repeat(Math.max(0, indexes.nextDimensionsAtStart()))); // value switch (type.valueType()) { @@ -621,8 +623,7 @@ public class MixedTensor implements Tensor { } // end bracket - for (int i = 0; i < indexes.nextDimensionsAtEnd(); i++) - b.append("]"); + b.append("]".repeat(Math.max(0, indexes.nextDimensionsAtEnd()))); } return index; } @@ -656,27 +657,16 @@ public class MixedTensor implements Tensor { } } - private static class DenseSubspaceBuilder implements IndexedTensor.DirectIndexBuilder { - - private final TensorType type; - private final double[] values; - - public DenseSubspaceBuilder(TensorType type, double[] values) { - this.type = type; - this.values = values; - } - - @Override - public TensorType type() { return type; } + private record DenseSubspaceBuilder(TensorType type, double[] values) implements IndexedTensor.DirectIndexBuilder { @Override public void cellByDirectIndex(long index, double value) { - values[(int)index] = value; + values[(int) index] = value; } @Override public void cellByDirectIndex(long index, float value) { - values[(int)index] = value; + values[(int) index] = value; } } |