public void CopyTo <Tout>(SpanTensor2 <Tout> masterOut, TensorSize2 kernelSize, Kernel2Copy <T, Tout> kernel, TensorIndices2 margin = default) where Tout : unmanaged { var tmpSrc = new SpanTensor2 <T>(kernelSize); var tmpDst = new SpanTensor2 <Tout>(kernelSize); var stepSize = kernelSize - margin - margin; for (int i0 = 0; i0 < masterOut.Dimensions[0]; i0 += stepSize[0]) { for (int i1 = 0; i1 < masterOut.Dimensions[1]; i1 += stepSize[1]) { var offset = new TensorIndices2(i0, i1); this.CopyTo(offset, tmpSrc, default, kernelSize);
public void CopyTo(TensorIndices2 srcOffset, SpanTensor2 <T> dst, TensorIndices2 dstOffset, TensorSize2 size) { size = TensorSize2.Min(size, TensorSize2.ExclusiveUnion(this.Dimensions, ref srcOffset, dst.Dimensions, ref dstOffset)); for (int i0 = 0; i0 < size[0]; ++i0) { var srcSpan = this[srcOffset[0] + i0].Span.Slice(srcOffset[1]); var dstSpan = dst[dstOffset[0] + i0].Span.Slice(dstOffset[1]); var l1 = Math.Min(srcSpan.Length, dstSpan.Length); l1 = Math.Min(l1, size[1]); srcSpan.Slice(0, l1).CopyTo(dstSpan); } }