Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions src/NumSharp/Extensions/NdArray.Convolve.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using NumSharp;

namespace NumSharp.Extensions
{
public static partial class NDArrayExtension
{
/// <summary>
/// Convolution of 2 series
/// </summary>
/// <param name="numSharpArray1"></param>
/// <param name="numSharpArray2"></param>
/// <param name="mode"></param>
/// <returns></returns>
public static NDArray<double> Convolve(this NDArray<double> numSharpArray1, NDArray<double> numSharpArray2, string mode = "full")
{
int nf = numSharpArray1.Length;
int ng = numSharpArray2.Length;

var numSharpReturn = new NDArray<double>();

if (mode.Equals("full"))
{
int n = nf + ng - 1;

var out_ = new double[n];

for (int idx = 0; idx < n; ++idx)
{
int jmn = (idx >= ng - 1) ? (idx - (ng - 1)) : 0;
int jmx = (idx < nf - 1) ? idx : nf - 1;

for (int jdx = jmn; jdx <= jmx; ++jdx )
{
out_[idx] += ( numSharpArray1[jdx] * numSharpArray2[idx - jdx] );
}
}

numSharpReturn.Data = out_;
}
else
{

}

return numSharpReturn;
}
}
}
44 changes: 44 additions & 0 deletions test/NumSharp.UnitTest/Extensions/NdArray.Convolve.Test.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Text;
using NumSharp.Extensions;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace NumSharp.UnitTest.Extensions
{
/// <summary>
/// Test concolve with standard example from
/// https://www.numpy.org/devdocs/reference/generated/numpy.convolve.html
/// </summary>
[TestClass]
public class NdArrayConvolveTest
{
[TestMethod]
public void ConvoleFull()
{
var series1 = new NDArray<double>();
series1.Data = new double[]{1, 2, 3};

var series2 = new NDArray<double>();
series2.Data = new double[]{0, 1, 0.5};

var series3 = series1.Convolve(series2);

double[] expectedResult = new double[]{0, 1, 2.5, 4, 1.5};

Assert.IsTrue(Enumerable.SequenceEqual(series3.Data.ToArray(), expectedResult));
}
[TestMethod]
public void ConvoleValid()
{
// To be done
}
[TestMethod]
public void ConvoleSame()
{
// To be done
}

}
}