質問編集履歴
2
実行可能なコードにした
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,8 +3,17 @@
|
|
3
3
|
Rust で Python で使うようのコードを書いています。Python で使うときに配列の中身は整数型でも浮動小数点数でも良いようにしたいのでジェネリクスを使って対応させようとしています。
|
4
4
|
|
5
5
|
```rust
|
6
|
+
use pyo3::prelude::*;
|
7
|
+
use pyo3::wrap_pyfunction;
|
8
|
+
|
6
9
|
use num_traits::{NumAssign, NumCast};
|
7
10
|
|
11
|
+
#[pymodule]
|
12
|
+
fn pykk(_py: Python, m: &PyModule) -> PyResult<()> {
|
13
|
+
m.add_wrapped(wrap_pyfunction!(imag2real))?;
|
14
|
+
Ok(())
|
15
|
+
}
|
16
|
+
|
8
17
|
#[pyfunction]
|
9
18
|
fn imag2real<T>(x: Vec<T>, y: Vec<T>) -> PyResult<Vec<f64>>
|
10
19
|
where
|
1
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -62,4 +62,50 @@
|
|
62
62
|
|
63
63
|
ということだと思うのですが、これらをどう解決したらいいのかわかりません。
|
64
64
|
|
65
|
-
初歩的な質問かと思いますが、どうぞよろしくお願いいたします。
|
65
|
+
初歩的な質問かと思いますが、どうぞよろしくお願いいたします。
|
66
|
+
|
67
|
+
## 追記
|
68
|
+
|
69
|
+
Cargo.toml
|
70
|
+
|
71
|
+
```toml
|
72
|
+
[package]
|
73
|
+
authors = ["xxx xxx"]
|
74
|
+
edition = "2018"
|
75
|
+
name = "pykk"
|
76
|
+
version = "0.1.0"
|
77
|
+
|
78
|
+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
79
|
+
|
80
|
+
[lib]
|
81
|
+
crate-type = ["cdylib"]
|
82
|
+
name = "pykk"
|
83
|
+
|
84
|
+
[dependencies.pyo3]
|
85
|
+
features = ["extension-module"]
|
86
|
+
version = "0.13.2"
|
87
|
+
|
88
|
+
[dependencies]
|
89
|
+
num-traits = "0.2.14"
|
90
|
+
```
|
91
|
+
|
92
|
+
関数 `integrate` の実装
|
93
|
+
|
94
|
+
```rust
|
95
|
+
fn integrate<T>(x: &Vec<T>, y: &Vec<T>, num: usize) -> f64
|
96
|
+
where
|
97
|
+
T: NumAssign + NumCast + Copy,
|
98
|
+
{
|
99
|
+
let mut result = T::from(0.0).unwrap();
|
100
|
+
let diff = x[1] - x[0];
|
101
|
+
|
102
|
+
for i in 0..x.len() {
|
103
|
+
if i == num {
|
104
|
+
continue;
|
105
|
+
}
|
106
|
+
result += x[num] * y[i] / (x[i] * x[i] - x[num] * x[num]) * diff;
|
107
|
+
}
|
108
|
+
|
109
|
+
result.to_f64().unwrap()
|
110
|
+
}
|
111
|
+
```
|