- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ndarray
编写一组数学函数,我想在任何类型的 ArrayBase
上执行这些函数。但是,我无法指定所涉及的特征/类型。
此基本函数适用于 OwnedRepr
或 ViewRepr
数据:
use ndarray::{prelude::*, Data}; // 0.13.1
fn sum_owned(x: Array<f64, Ix1>) -> f64 {
x.sum()
}
fn sum_view(x: ArrayView<f64, Ix1>) -> f64 {
x.sum()
}
fn main() {
let a = Array::from_shape_vec((4,), vec![1.0, 2.0, 3.0, 4.0]).unwrap();
println!("{:?}", sum_owned(a.clone()));
let b = a.slice(s![..]);
println!("{:?}", sum_view(b));
// Complains that OwnedRepr is not ViewRepr
//println!("{:?}", sum_view(a.clone()));
}
我能理解为什么注释掉的部分无法编译,但我对泛型的理解还不够深入,无法编写更多...泛型。
这是我尝试过的:
use ndarray::prelude::*;
use ndarray::Data;
fn sum_general<S>(x: ArrayBase<S, Ix1>) -> f64
where
S: Data,
{
x.sum()
}
编译器错误表明 Data
不够具体,但我无法很好地解析它以找出解决方案:
error[E0277]: the trait bound `<S as ndarray::data_traits::RawData>::Elem: std::clone::Clone` is not satisfied
--> src/lib.rs:8:7
|
6 | S: Data,
| - help: consider further restricting the associated type: `, <S as ndarray::data_traits::RawData>::Elem: std::clone::Clone`
7 | {
8 | x.sum()
| ^^^ the trait `std::clone::Clone` is not implemented for `<S as ndarray::data_traits::RawData>::Elem`
error[E0277]: the trait bound `<S as ndarray::data_traits::RawData>::Elem: num_traits::identities::Zero` is not satisfied
--> src/lib.rs:8:7
|
6 | S: Data,
| - help: consider further restricting the associated type: `, <S as ndarray::data_traits::RawData>::Elem: num_traits::identities::Zero`
7 | {
8 | x.sum()
| ^^^ the trait `num_traits::identities::Zero` is not implemented for `<S as ndarray::data_traits::RawData>::Elem`
error[E0308]: mismatched types
--> src/lib.rs:8:5
|
4 | fn sum_general<S>(x: ArrayBase<S, Ix1>) -> f64
| --- expected `f64` because of return type
...
8 | x.sum()
| ^^^^^^^ expected `f64`, found associated type
|
= note: expected type `f64`
found associated type `<S as ndarray::data_traits::RawData>::Elem`
= note: consider constraining the associated type `<S as ndarray::data_traits::RawData>::Elem` to `f64`
= note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
最佳答案
如果您查看 ndarray::ArrayBase::sum
的定义您尝试调用的函数:
impl<A, S, D> ArrayBase<S, D>
where
S: Data<Elem = A>,
D: Dimension,
{
pub fn sum(&self) -> A
where
A: Clone + Add<Output = A> + Zero
{
// etc.
}
}
很明显,在你的情况下 A = f64
和 D = Ix1
, 但您仍然需要指定约束 S: Data<Elem = f64>
.因此:
use ndarray::prelude::*;
use ndarray::Data;
fn sum_general<S>(x: ArrayBase<S, Ix1>) -> f64
where
S: Data<Elem = f64>,
{
x.sum()
}
这正是编译器在提示时的意思:
= note: expected type `f64` found associated type `<S as ndarray::data_traits::RawData>::Elem` = note: consider constraining the associated type `<S as ndarray::data_traits::RawData>::Elem` to `f64`
关于multidimensional-array - 如何编写一个将 ndarray Array 或 ArrayView 作为输入的通用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61758934/
Perl6 Twitter 模块提供了一个多维变量,其中包含来自搜索查询的推文。这段代码: %tweets[0].say; %tweets[0].say; 打印: es Fri May 04 13:5
只是好奇这是否是在D中初始化动态多维数组的最佳实践。他们的语言引用中有关于数组的部分,但是我不确定它是否超出了我要完成的工作。 class Map { Tile[][] tiles;
我在 golang 中为二维数组使用以下简单代码,其中 APPEND 函数导致重复值而不是追加。 package main import "fmt" func main() { var n i
我刚刚构建了我的第一个 LED 立方体,想稍微扩展一下测试代码。为了寻址我的 3x3x3 立方体的每个 LED,我想使用相应的三维数组,但我在初始化时遇到了错误。 这是我做的: int cube_ma
我需要求解一个线性方程组 Lx=b,其中 x 始终是一个向量(3x1 数组),L 是一个 Nx3 数组,而 b 是一个 Nx1 向量。 N 通常在 4 到 10 之类的范围内。我使用解决这个问题没有问
我有几个问题: 1、isoMDS和cmdscale有什么区别? 2. 我可以使用非对称矩阵吗? 3. 有没有办法确定最佳维度数(结果)? 最佳答案 MDS 方法之一是 distance scaling
我目前正在学习数据库类(class)。之前在看一些关系型数据库的视频,在做研究的时候,碰巧遇到了这个多维索引的话题。出于好奇,我试着读了一点,但我并不完全理解它在说什么,因为它似乎是一个非常高级的话题
这有点复杂;我欢迎就如何提高问题的清晰度提出任何意见。 好的,假设我有一个数组: real, allocatable :: A(:,:,:) 我想在使用它之前分配它。第三维的大小是否可能取决于第二维的
我有一个动态的 3d 数字数组,目前我正在像在 C 中那样做: for (auto i = 0; i < size; i++) { for (auto j = 0; j < size; j++
我最初有一个空矩阵: m = Matrix(0, 3) 和我要添加的行: v = [2,3] 我尝试这样做: [m v] 但我得到一个错误 ERROR: ArgumentError: number
我想知道从文件中读取的几个矩阵的维数。我已经编写了代码来计算矩阵的行数和元素总数,因此知道列数,将元素总数除以行数。 program matrix implicit none inte
假设我有一个多维数组: logic [7:0] mda [7:0]; 我现在要做的是将 mda[7:4] 分配给输出端口,即定义如下: output [31:0] odata; 当然,我可以使用连接来
想象一个菱形等距图,它基本上是一个以 (x,y) 坐标和顶部单元格为原点的二维数组,如单元格中所标记: 我想按以下顺序从后到前遍历这些单元格: 通过未知的同侧 map 以这种方式循环的算法是什么? 预
我无法弄清楚如何在矩阵中的矩阵中获取矩阵的长度(嵌套深度为 3)。所以简而言之,代码所做的是......看看发布者是否已经在数组中,然后它要么在数组中添加一个新列,其中包含一个新的发布者和相应的系统,
我是 Java8 的新手,无法使用流将一个数组映射到另一个二维数组。 我有一个二维数组,它是一种模式: boolean[][] pattern = { {true, true,
m = [] 初始化一个维度为1的空数组。我想初始化一个维度为2的空数组(稍后将在其上附加值。这可能吗? 最佳答案 尝试: m = reshape([],0,2) 要么, m = Array{Floa
如何在Cuda的设备内存中分配和传输2D阵列(与主机之间)? 最佳答案 我找到了解决该问题的方法。我不必弄平阵列。 内置的cudaMallocPitch()功能可以完成这项工作。我可以使用cudaMe
我指的是ndarray crate 以及assert_approx_eq。 我的问题:assert_approx_eq等是否存在类似ndarray::Array2的东西? 目前我正在做: for it
我试图通过逐行拆分顶部和底部行来解决leetcode上的螺旋顺序问题,但我遇到了我无法理解的借位检查器问题。这是产生编译错误的最小示例: pub fn f(mut matrix: &mut [Vec]
我想执行一个循环操作,该操作将执行以下操作(操作必须逐个元素地进行)。 let mut spec = array![] // matrix mxn let exponencial = array![]
我是一名优秀的程序员,十分优秀!