README.md in convolver-0.0.2 vs README.md in convolver-0.1.0
- old
+ new
@@ -3,22 +3,28 @@
[![Build Status](https://travis-ci.org/neilslater/convolver.png?branch=master)](http://travis-ci.org/neilslater/convolver)
Adds a convolve operation to NArray floats. It is around 250 times faster than equivalents
in pure Ruby.
-Note that convolves based on FFTW3 could well be faster still for large arrays with large kernels.
-Benchmark tests suggest that the kernel needs to be a few hundred items, and be significantly smaller
-than the signal before FFTW3 offers a significant advantage.
+The gem makes convolution via FFTW3 library available. This is faster for convolutions with
+larger kernels and signals. The relationship is complex, but as a rule of thumb, the kernel
+needs to be around 1000 entries or larger before it is worth switching to FFTW3-based convolves.
## Planned features
The *convolver* gem will eventually contain a basic kit for creating, training and running convolutional
neural networks. As a side effect of this plan, it will also contain efficient code for
calculating signal convolutions for other types of analysis.
## Installation
+### Dependency: FFTW3
+
+Before you install *convolver*, you should install FFTW3. See http://www.fftw.org/ for details.
+
+### Installing the gem
+
Add this line to your application's Gemfile:
gem 'convolver'
And then execute:
@@ -39,14 +45,21 @@
=> NArray.float(2): [ 0.19, 0.27 ]
* Convolver only works on single-precision floats internally. It will cast NArray types to this, if
possible, prior to calculating.
- * The convolution is an "inner" one. The output is smaller than the input, each dimension is reduced
-by 1 less than the width of the kernel in the same dimension.
+ * The output is smaller than the input, each dimension is reduced by 1 less than the width of the
+kernel in the same dimension.
* Convolver expects input a and kernel b to have the same rank, and for the kernel to be same size
or smaller in all dimensions as the input.
+
+FFTW3 convolution:
+
+ a = NArray[0.3,0.4,0.5]
+ b = NArray[1.3, -0.5]
+ c = Convolver.convolve_fftw3( a, b )
+ => NArray.float(2): [ 0.19, 0.27 ]
## Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)