Skip to content

Commit db5ef46

Browse files
github-actions[bot]kasperk81michaelgsharp
authored
[release/9.0-staging] fix stack 2x2 tensor along dimension 1 (#110053)
* fix stack 2x2 tensor along dimension 1 * fixed last stack errors --------- Co-authored-by: kasperk81 <[email protected]> Co-authored-by: Michael Sharp <[email protected]>
1 parent 28117b9 commit db5ef46

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorExtensions.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3456,7 +3456,7 @@ public static Tensor<T> StackAlongDimension<T>(int dimension, params ReadOnlySpa
34563456
Tensor<T>[] outputs = new Tensor<T>[tensors.Length];
34573457
for (int i = 0; i < tensors.Length; i++)
34583458
{
3459-
outputs[i] = Tensor.Unsqueeze(tensors[0], dimension);
3459+
outputs[i] = Tensor.Unsqueeze(tensors[i], dimension);
34603460
}
34613461
return Tensor.ConcatenateOnDimension<T>(dimension, outputs);
34623462
}
@@ -3494,9 +3494,9 @@ public static ref readonly TensorSpan<T> StackAlongDimension<T>(scoped ReadOnlyS
34943494
Tensor<T>[] outputs = new Tensor<T>[tensors.Length];
34953495
for (int i = 0; i < tensors.Length; i++)
34963496
{
3497-
outputs[i] = Tensor.Unsqueeze(tensors[0], dimension);
3497+
outputs[i] = Tensor.Unsqueeze(tensors[i], dimension);
34983498
}
3499-
return ref Tensor.ConcatenateOnDimension<T>(dimension, tensors, destination);
3499+
return ref Tensor.ConcatenateOnDimension<T>(dimension, outputs, destination);
35003500
}
35013501
#endregion
35023502

src/libraries/System.Numerics.Tensors/tests/TensorTests.cs

+42
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,7 @@ public static void TensorSetSliceTests()
988988
Assert.Equal(13, t0[1, 3]);
989989
Assert.Equal(14, t0[1, 4]);
990990
}
991+
991992
[Fact]
992993
public static void TensorStackTests()
993994
{
@@ -1074,6 +1075,47 @@ public static void TensorStackTests()
10741075
Assert.Equal(8, resultTensor[1, 3, 1]);
10751076
Assert.Equal(9, resultTensor[1, 4, 0]);
10761077
Assert.Equal(9, resultTensor[1, 4, 1]);
1078+
1079+
// stacking 2x2 tensors along dimension 1
1080+
Tensor<int> v1 = Tensor.Create([1, 2, 3, 4], [2, 2]);
1081+
Tensor<int> v2 = Tensor.Create([10, 20, 30, 40], [2, 2]);
1082+
1083+
resultTensor = Tensor.StackAlongDimension(1, [v1, v2]);
1084+
1085+
Assert.Equal(3, resultTensor.Rank);
1086+
Assert.Equal(2, resultTensor.Lengths[0]);
1087+
Assert.Equal(2, resultTensor.Lengths[1]);
1088+
Assert.Equal(2, resultTensor.Lengths[2]);
1089+
1090+
Assert.Equal(1, resultTensor[0, 0, 0]);
1091+
Assert.Equal(2, resultTensor[0, 0, 1]);
1092+
Assert.Equal(10, resultTensor[0, 1, 0]);
1093+
Assert.Equal(20, resultTensor[0, 1, 1]);
1094+
1095+
Assert.Equal(3, resultTensor[1, 0, 0]);
1096+
Assert.Equal(4, resultTensor[1, 0, 1]);
1097+
Assert.Equal(30, resultTensor[1, 1, 0]);
1098+
Assert.Equal(40, resultTensor[1, 1, 1]);
1099+
1100+
resultTensor = Tensor.StackAlongDimension(0, [v1, v2]);
1101+
1102+
Tensor<int> resultTensor2 = Tensor.Create<int>([2, 2, 2]);
1103+
Tensor.StackAlongDimension([v1, v2], resultTensor2, 1);
1104+
1105+
Assert.Equal(3, resultTensor2.Rank);
1106+
Assert.Equal(2, resultTensor2.Lengths[0]);
1107+
Assert.Equal(2, resultTensor2.Lengths[1]);
1108+
Assert.Equal(2, resultTensor2.Lengths[2]);
1109+
1110+
Assert.Equal(1, resultTensor2[0, 0, 0]);
1111+
Assert.Equal(2, resultTensor2[0, 0, 1]);
1112+
Assert.Equal(10, resultTensor2[0, 1, 0]);
1113+
Assert.Equal(20, resultTensor2[0, 1, 1]);
1114+
1115+
Assert.Equal(3, resultTensor2[1, 0, 0]);
1116+
Assert.Equal(4, resultTensor2[1, 0, 1]);
1117+
Assert.Equal(30, resultTensor2[1, 1, 0]);
1118+
Assert.Equal(40, resultTensor2[1, 1, 1]);
10771119
}
10781120

10791121
[Fact]

0 commit comments

Comments
 (0)