问题标签 [rust-ndarray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 为 trait 实现 trait 时,不能将 `AsArray` 做成对象
基本上我正在尝试制作一个表明能够转换为 2D ndarray
aka的特征ndarray::Array2
:
我想通过扩展现有AsArray
特征来做到这一点,但是出于某种深奥的原因,Rust 禁止我为第三方 struct () 实现第三方特征polars::DataFrame
,因此我必须为此创建自己的特征。
无论如何,这适用于polars::DataFrame
:
但是,我也想为任何已经可以转换为二维数组的东西实现这个,所以我为AsArray
上面提到的 trait 实现了这个 trait:
然而,编译器让我为此感到悲痛:
我知道这与对象安全有关,但我认为我已经满足了该页面上提到的所有标准,即 trait doesn't return Self
,并且AsArray
指定了所有通用参数。
出了什么问题,我该如何解决?
generics - 在 Array1 上创建一个泛型方法
我有以下 Trait 实现,并希望unit
通用 over Array1<T>
,但未能找到正确的 Trait 边界(尤其是这对我来说似乎微不足道,所有 T 需要支持的基本上是输出 T 以使函数工作的基本算术) .
编译器建议添加std::ops::Mul<Output = &ArrayBase<OwnedRepr<T>, Dim<[usize; 1]>>>
,但这样做会一遍又一遍地给出相同的错误。
matrix - 特征绑定不满足从元组特征构建 ndarray
我对 Rust 很陌生。目前,我正在寻找一种基于元组生成具有维度的矩阵的方法。
通过 zip 的迭代工作正常,我得到 layer_in 和 _out 的输出,但是在创建矩阵时我得到以下错误:
我非常需要社区在这个问题上的帮助。非常感谢。
rust - Rust ndarray 数组的初等函数数学运算
我只是想为 Rust ndarray 做基本的数学运算(例如,sin、exp、log、sqrt ...)。但是,通过阅读 ndarray 的文档,我没有找到任何有用的示例。
比如说:
如何some_math
有效地实施?我当然可以通过循环遍历矩阵的元素来进行元素操作,但这听起来不太好,我不想这样做。
在numpy
python 中,这简直就是np.sqrt(np.exp(matrix))
. 我的意思是 Rust 确实是一门很棒的语言,但是,即使是简单的代数也很不方便(缺乏适当的生态系统)。
更新:ndarray 正在进行拉取请求。如果这被接受,那么你可以简单地做matrix.exp().sqrt()
等。
ndarray-doc 中有一个非常隐藏的页面,告诉您如何进行此类数学运算。
rust - 如何将整数添加到 Rust ndarray 中的切片?
让我尝试:
这使:
rust - Rust 特征绑定膨胀/缺乏继承
我正在尝试将 nalgebra 和/或 ndarray Rust crates 包装成一个抽象LinearOperator
特征和相应的AdjointableOperator
等特征。问题是我得到了显着的“特征绑定膨胀”,甚至必须指定内部实现细节(Storage
, DefaultAllocator
)以使编译器不阻塞。在代数的情况下:
(在向量到向量操作的情况下,维度K
将为 1。理想情况下apply
只是一个函数调用,但编译器目前不允许定义它。)其中一些可能不是单独需要的LinearOperator
(例如DefaultAllocator : Allocator<E,M,N>
,对于伴随维度),但编译器甚至开始要求它们LinearOperator
一次AdjointableOperator
也被定义。在 ndarray 的情况下,边界的行数较少,但仍需要指定几乎没有记录的半内部特征。
所有这些 trait bound 都需要为 theAdjointableOperator
和其他 trait 重复,所以我尝试至少将需求压缩到自定义 trait 中:
然后仅Matrix<E,N,M,SM> : ValidMatrix<E,N,M,SM>
在 的定义中指定LinearOperator
。编译器立即开始抱怨DefaultAllocator
(可能)未实现。
那么有什么办法可以避免这种“trait bound bloat”,即 crate 的用户基本上必须访问越来越多的 crate 内部实现细节来为暴露的类型实现自己的特征?我可以考虑mul
在特征中指定等ValidMatrix
,并实现这些,但首先以这种方式设计上游板条箱肯定会更有效。
rust - 什么是最有效的:对 ArrayBase 或 ArrayView 的引用?
我正在对使用ndarray
crate 操作数组的 Rust 代码库进行改进。我有一个问题,我在文档中找不到明确的答案。
ArrayView
将实例作为参数传递给函数是否更有效,还是应该使用对的引用Array
?我的直觉是,由于ArrayView
是数组的视图,因此在进行计算时,它仅传递数组的视图,并且不授予函数所有权(因此不复制)底层数据。
简而言之,从传递的实例切换ArrayView
到传递的引用是否有任何速度提升Array
?
我的目标是避免无用的内存分配/重复,这在处理大型数组时可能会非常昂贵。
rust - Rust ndarray 不匹配类型
我正在尝试使用 ndarray_image 从图像中获取 Array3:
Self.data 类型是 Array3,open_image 返回一个 Array3。这很奇怪,但错误类型也相同:
关于版本:我对所有 ndarray-* crate 使用版本“0”。
Cargo.toml 中的依赖项:
rust - rust ndarray 连接一维数组
我正在尝试沿同一轴连接 3 个 1d 数组,以便它们构成一个长的 1d 数组。
导致错误:
如何将其更改speed_m_s
为一维数组?
python - 如何用 NDArray 输入和输出用 PyO3 包装函数?
我想包装一个函数,该函数采用一维 NDArray (rust-numpy) 和一个 usize 作为参数,并使用 PyO3 返回一个一维数组以从 python 调用代码。不幸的是,我找不到一个很好的例子来说明如何处理 PyO3 中的数组。这是我到目前为止的代码:
我添加了装饰器和模块包装功能。现在我收到此错误:
这是我的 cargo.toml:
有人可以告诉我如何实际修改 SMA 函数以与 PyO3 一起使用吗?谢谢!