Skip to content

Convolution with SVector #1466

@cgroves3

Description

@cgroves3

I'm trying to use the convolve methods with SVector's, but it doesn't seem to work. Here is an example:

use nalgebra::{DVector, SVector};

mod image;

fn main() {
    let vec = vec![1.0,2.0,3.0,4.0];
    let kernel = vec![1.0,2.0];
    let vec_d = DVector::from_vec(vec.clone());
    let ker_d = DVector::from_vec(kernel.clone());

    let expected_d_full = vec_d.convolve_full(ker_d.clone());
    let expected_d_valid = vec_d.convolve_valid(ker_d.clone());
    let expected_d_same = vec_d.convolve_same(ker_d);

    println!("full d: {:?}",expected_d_full);
    println!("valid d: {:?}",expected_d_valid);
    println!("same d: {:?}",expected_d_same);

    let vec_s = SVector::from_vec(vec);
    let ker_s = SVector::from_vec(kernel);

    let expected_s_full = vec_s.convolve_full(ker_s.clone());
    let expected_s_valid = vec_s.convolve_valid(ker_s.clone());
    let expected_s_same = vec_s.convolve_same(ker_s);

    println!("full s: {:?}",expected_s_full);
    println!("valid s: {:?}",expected_s_valid);
    println!("same s: {:?}",expected_s_same);
}

This produces the following error:

error[E0599]: no method named `convolve_full` found for struct `Matrix<{float}, nalgebra::Const<_>, nalgebra::Const<1>, ArrayStorage<{float}, _, 1>>` in the current scope
  --> src/main.rs:33:33
   |
33 |     let expected_s_full = vec_s.convolve_full(ker_s.clone());
   |                                 ^^^^^^^^^^^^^ method not found in `Matrix<{float}, Const<_>, Const<1>, ArrayStorage<{float}, _, 1>>`
   |
   = note: the method was found for
           - `Matrix<T, D1, nalgebra::Const<1>, S1>`

Is there any way to make these methods abstract of the type of Vector? Or does there need to be a second set of methods for the SVector type?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions