Types 浮点数或复杂输入的随机数组函数

Types 浮点数或复杂输入的随机数组函数,types,rust,linear-algebra,complex-numbers,Types,Rust,Linear Algebra,Complex Numbers,问题是:是否有可能在rust中编写一个函数来接受浮点或复杂的NDARRAY作为输入 我是个新手,来自python/numpy领域,在那里浮点数组和复杂数组配合得非常好。因此,当我编写一个函数时,我不担心一个或多个输入是否复杂 我想写一个函数,类似这样: fn example<T: ???>(a: T, x: ArrayViewD<'_, T>, y: ArrayViewD<'_, T>) -> ArrayD<T> { &x *

问题是:是否有可能在rust中编写一个函数来接受浮点或复杂的NDARRAY作为输入

我是个新手,来自python/numpy领域,在那里浮点数组和复杂数组配合得非常好。因此,当我编写一个函数时,我不担心一个或多个输入是否复杂

我想写一个函数,类似这样:

fn example<T: ???>(a: T, x: ArrayViewD<'_, T>, y: ArrayViewD<'_, T>) -> ArrayD<T> {
    &x * a + &y
}
使用ndarray::{ArrayD,arrayview};
使用num_complex::Complex64;
使用f64;
fn示例(a:f64,x:ArrayView)->ArrayD{
&x*a+&y
}
但要使输入通用。我猜应该是这样的:

fn example<T: ???>(a: T, x: ArrayViewD<'_, T>, y: ArrayViewD<'_, T>) -> ArrayD<T> {
    &x * a + &y
}
fn示例(a:T,x:ArrayView)->ArrayD{
&x*a+&y
}
但我不确定需要什么样的特质

我想蛮力的方法是强迫一切变得复杂?可以工作,但需要大量转换,内存翻倍,通常感觉不太对劲

我上面的示例是对PyO3示例的修改:


编辑 我还是缺少一些东西。如果我尝试:

fn示例(a:T,x:arrayView)->ArrayD{
&x*a+y
}
我得到:

error[E0369]:不能将`&ArrayBase`乘以`T`
-->src\main.rs:26:8
|
26 |和x*a+y
|——^-T
|     |
|&ArrayBase
|
帮助:考虑进一步限制这个界限
|
25 | fn示例(a:T,x:ArrayView)->ArrayD{
|                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^
错误[E0308]:类型不匹配
-->src\main.rs:26:14
|
25 | fn示例(a:T,x:ArrayView)->ArrayD{
|-此类型参数
26 |和x*a+y
|^^应为类型参数“T”,找到引用
|
=注意:应为类型参数`T`
找到引用“%ArrayBase”`
所以它想让我添加
std::ops::Mul
。但是如果我添加它,我会得到一个类似的错误,它想让我再次添加它(递归?)


我认为问题在于我的输入
a
x
y
都可以是不同的类型,这与输出类型不同。

这是否回答了您的问题?您可以使用
num_traits
板条箱中的特征,例如。这个问题不是特定于
ndarray
。这肯定是有帮助的,但我仍然缺少一些东西。上面的编辑显示了我对
Num
trait的失败尝试。他们在这个线性代数库中完成了它,但我无法理解它: