You can reduce the number of indexed calls to result , as well as the Length property:
int inputLength = filter.Length; int filterLength = filter.Length; var result = new double[inputLength + filterLength - 1]; for (int i = resultLength; i >= 0; i--) { double sum = 0;
If you split the outer loop, you can get rid of some repetitive conventions. (This takes 0 < filterLength & leq; inputLength & leq; resultLength )
int inputLength = filter.Length; int filterLength = filter.Length; int resultLength = inputLength + filterLength - 1; var result = new double[resultLength]; for (int i = 0; i < filterLength; i++) { double sum = 0; for (int j = i; j >= 0; j--) { sum += input[i - j] * filter[j]; } result[i] = sum; } for (int i = filterLength; i < inputLength; i++) { double sum = 0; for (int j = filterLength - 1; j >= 0; j--) { sum += input[i - j] * filter[j]; } result[i] = sum; } for (int i = inputLength; i < resultLength; i++) { double sum = 0; for (int j = i - inputLength + 1; j < filterLength; j++) { sum += input[i - j] * filter[j]; } result[i] = sum; }
source share