/// <summary>Broadcasts the tensor.</summary> /// <param name="lhs">The LHS.</param> /// <param name="rhs">The RHS.</param> /// <returns></returns> public Tuple <SuperArray, SuperArray> BroadcastTensor(SuperArray lhs, SuperArray rhs) { if (!lhs.IsSameSizeAs(rhs)) { if (lhs.Shape[0] == rhs.Shape[0] && (lhs.Shape[1] == 1 || rhs.Shape[1] == 1)) { if (lhs.Shape[1] == 1) { lhs = lhs.RepeatTensor(1, rhs.Shape[1]); } if (rhs.Shape[1] == 1) { rhs = rhs.RepeatTensor(1, lhs.Shape[1]); } } if (lhs.Shape[1] == rhs.Shape[1] && (lhs.Shape[0] == 1 || rhs.Shape[0] == 1)) { if (lhs.Shape[0] == 1) { lhs = lhs.RepeatTensor(rhs.Shape[0], 1); } if (rhs.Shape[0] == 1) { rhs = rhs.RepeatTensor(lhs.Shape[0], 1); } } if (lhs.Shape[1] == 1 && rhs.Shape[0] == 1) { if (lhs.Shape[1] == 1) { lhs = lhs.RepeatTensor(1, rhs.Shape[1]); } if (rhs.Shape[0] == 1) { rhs = rhs.RepeatTensor(lhs.Shape[0], 1); } } if (lhs.Shape[0] == 1 || rhs.Shape[1] == 1) { if (lhs.Shape[0] == 1) { lhs = lhs.RepeatTensor(rhs.Shape[0], 1); } if (rhs.Shape[1] == 1) { rhs = rhs.RepeatTensor(1, lhs.Shape[1]); } } } return(new Tuple <SuperArray, SuperArray>(lhs, rhs)); }
/// <summary> /// Tiles the specified tensor. /// </summary> /// <param name="x">The x.</param> /// <param name="repetitions">The repetitions.</param> /// <returns></returns> public SuperArray Tile(SuperArray x, long repetitions) { long[] shape = new long[x.DimensionCount]; for (int i = 0; i < shape.Length; i++) { shape[i] = 1; } shape[shape.Length - 1] = repetitions; return(x.RepeatTensor(shape)); }