前提・実現したいこと
ndarray_randを用いて、中身が乱数の行列をf32, f64に対して同じトレイと境界を用いて生成したいと考えています。
発生している問題・エラーメッセージ
error[E0277]: the trait bound `ndarray_rand::rand_distr::Normal<{float}>: Distribution<T>` is not satisfied --> src/linear/sgd.rs:46:69 | 46 | let mut weight = Array2::<T>::random((1, input.shape()[0]), Normal::new(1., 1.).unwrap()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Distribution<T>` is not implemented for `ndarray_rand::rand_distr::Normal<{float}>` | = help: the following implementations were found: <ndarray_rand::rand_distr::Normal<N> as Distribution<N>> = note: required by `ndarray_rand::RandomExt::random`
このエラーは自分で実装したtraitがfloatに対応していないというのがエラーの原因だと考えられるのですが、
このトレイとはf32やf64に対応するように実装してあるのにこのようなエラーが出た理由がわかりません
該当のソースコード
rust
1use ndarray_linalg::lapack::Lapack; 2use ndarray_linalg::types::Scalar; 3use ndarray_rand::rand_distr::Float as Float; 4 5trait Type: : Lapack + Scalar + Float {} 6 7impl Type for f32 {} 8impl Type for f64 {} 9 10let weight = Array2::random((1, input.shape()[0]), Normal::new(1., 1.).unwrap());
多分、f64やf32に対して個別に実装を行えば実装することは可能だとは思いますが、
あまりいい方法とは考えられないためどのように実装すればよいかわかりません。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。