簡體   English   中英

特征綁定不滿足從元組特征構建 ndarray

[英]Trait bound not satisfied building an ndarray from a tuple trait

我對 Rust 很陌生。 目前,我正在尋找一種基於元組生成維度矩陣的方法。

use itertools::zip;
use ndarray::Array;

fn main() {
    let mut layer_width: [u64; 4] = [784, 512, 256, 10]; //in- & output layers of the nn 
    init_nn(&mut layer_width);

}

fn init_nn(layer_width: &mut [u64; 4]) {
    for (layer_in, layer_out) in zip(&layer_width[.. 4], &layer_width[1 ..]) {
        let mut params = Array::zeros((layer_in, layer_out));  //error  
    }

}

通過 zip 的迭代工作正常,我得到了 layer_in 和 _out 的輸出,但是在創建矩陣時,我收到以下錯誤:

the trait bound `(&i64, &i64): ndarray::Dimension` is not satisfied

the trait `ndarray::Dimension` is not implemented for `(&i64, &i64)`

note: required because of the requirements on the impl of `ndarray::IntoDimension` for `(&i64, &i64)`rustc(E0277)
main.rs(13, 39): the trait `ndarray::Dimension` is not implemented for `(&i64, &i64)`

我非常需要社區在此問題上的幫助。 非常感謝。

問題是您將(&i64, &i64)傳遞給Array::zeros() ,這是無效的。 相反,您可以傳入(usize, usize) 修復之后,代碼仍然無法編譯,因為我們沒有給編譯器任何了解元素類型的方法,但是一旦您執行諸如分配給數組之類的操作,該錯誤就會自行解決。

這是工作代碼:

use itertools::zip;
use ndarray::Array;

fn main() {
    let mut layer_width: [usize; 4] = [784, 512, 256, 10]; // in- & output layers of the nn
    init_nn(&mut layer_width);
}

fn init_nn(layer_width: &mut [usize; 4]) {
    for (&layer_in, &layer_out) in zip(&layer_width[..4], &layer_width[1..]) {
        let mut params = Array::zeros((layer_in, layer_out));
        
        // Dummy assignment so the compiler can infer the element type
        params[(0, 0)] = 1;
    }
}

注意for (&layer_in, &layer_out)添加的& zip()函數的輸出是(&usize, &usize) ,因此我們使用解構將引用解引用為普通的usize 等效地,您可以完成Array::zeros((*layer_in, *layer_out))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM