如何使用 serde 序列化包含 ndarray 字段的结构?
How to use serde to serialize structs containing ndarray fields?
我是 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>
}
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`
# Cargo.toml
[dependencies]
ndarray = { version = "0.12.1", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
查看 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"] }
这个答案是@Locke 在评论中提出的。我刚刚为未来的访客创建了一个小答案。
我是 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>
}
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`
# Cargo.toml
[dependencies]
ndarray = { version = "0.12.1", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
查看 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"] }
这个答案是@Locke 在评论中提出的。我刚刚为未来的访客创建了一个小答案。