我对 Rust 相当陌生,但希望将它用于一些数字工作,并开始探索ndarray箱。serde::Serialize然而,这样做时,我在尝试导出包含数组的结构时遇到了一些困难serde::Deserialize。
特别是,我尝试编译以下代码片段,但这样做时出现错误:
extern crate serde;
use ndarray::{ Array1 };
use serde::{ Serialize, Deserialize };
#[derive(Serialize, Deserialize)]
pub struct Canary {
pub xs: Array1<f64>
}
Run Code Online (Sandbox Code Playgroud)
error[E0277]: the trait bound `ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 1]>>: serde::Serialize` is not satisfied
--> src/lib.rs:40:5
|
40 | pub xs: Array1<f64>
| ^^^ the trait `serde::Serialize` is not implemented for `ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 1]>>`
|
= note: required by `serde::ser::SerializeStruct::serialize_field`
Run Code Online (Sandbox Code Playgroud)
# Cargo.toml
[dependencies]
ndarray = { version = "0.12.1", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
Run Code Online (Sandbox Code Playgroud)
看看 上的边界impl<A, D, S> Serialize for ArrayBase<S, D> where A: Serialize, D: Dimension + Serialize, S: Data<Elem = A>,我对错误是什么有点困惑,因为A = f64实现了Serialize,并且因为D = Dim<[usize; 1]>实现了Dimension和Serialize。为了导出包含数组的结构的序列化,我是否缺少某些东西?谢谢!
的最新版本ndarray是0.13.1.
更新您的版本Cargo.toml应该可以解决该问题:
[dependencies]
ndarray = { version = "0.13.1", features = ["serde"] }
Run Code Online (Sandbox Code Playgroud)
这个答案是由 @Locke 在评论中建议的。我刚刚为未来的访客创建了一个小答案。
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |