如何将人造丝的 .par_iter() 与泛型向量一起使用?

2023-11-23

这是一个人为的例子,但我相信如果我能让这个工作正常,我可以将其应用到我的具体案例中。

extern crate num;
extern crate rayon;
use rayon::prelude::*;
use num::Float;

fn sqrts<T: Float>(floats: &Vec<T>) -> Vec<T> {
    floats.par_iter().map(|f| f.sqrt()).collect()
}

fn main() {
    let v = vec![1.0, 4.0, 9.0, 16.0, 25.0];
    println!("{:?}", sqrts(&v));
}

这个错误在编译时出现“方法par_iter存在,但不满足以下特征界限:&std::vec::Vec<T> : rayon::par_iter::IntoParallelIterator“。如果我使用,代码可以正常工作iter代替par_iter或者如果我改用f32 or f64而不是通用的。

我该怎么做才能使用par_iter在泛型向量上?是个IntoParallelIterator特质是由最终用户实现的吗?我该怎么做呢?


首先,阅读。然后...

审查实施者IntoParallelIterator:

impl<'data, T: Sync + 'data> IntoParallelIterator for &'data [T]

添加Sync绑定解决了这个问题。 Rayon 的工作方式可能是使用多个线程,但是您原来的T不保证共享或线程之间是否安全!这又出现了第二次:

error: no method named `collect` found for type `rayon::par_iter::map::Map<rayon::par_iter::slice::SliceIter<'_, T>, rayon::par_iter::map::MapFn<[closure@src/main.rs:7:27: 7:39]>>` in the current scope
 --> src/main.rs:7:41
  |
7 |     floats.par_iter().map(|f| f.sqrt()).collect()
  |                                         ^^^^^^^
  |
  = note: the method `collect` exists but the following trait bounds were not satisfied: `rayon::par_iter::map::MapFn<[closure@src/main.rs:7:27: 7:39]> : rayon::par_iter::map::MapOp<&_>`, `rayon::par_iter::map::Map<rayon::par_iter::slice::SliceIter<'_, T>, rayon::par_iter::map::MapFn<[closure@src/main.rs:7:27: 7:39]>> : std::iter::Iterator`

退房collect:

fn collect<C>(self) -> C 
    where C: FromParallelIterator<Self::Item>

我们可以看到目标类型需要实现FromParallelIterator:

impl<T> FromParallelIterator<T> for Vec<T> where T: Send

因此,添加两个边界可以使其编译:

fn sqrts<T: Float + Send + Sync>(floats: &[T]) -> Vec<T>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将人造丝的 .par_iter() 与泛型向量一起使用? 的相关文章

随机推荐

  • Git 缺少提交错误

    我们最近更改了存储库的位置 并且发现文件中缺少几个月前的提交 我们拥有 Git 的旧服务器已关闭 因此无法从那里恢复提交 这是我得到的错误 git fsck full broken link from commit 58ba71d080b1
  • Rails 4 枚举验证

    这是我第一次在 Rails 4 中使用枚举 我遇到了一些问题 想到了一些肮脏的解决方案 并想检查是否有更优雅的解决方案 这是我的表迁移相关部分 create table shippings do t t column status inte
  • leaflet-draw 删除按钮删除“全部清除”操作

    如何从删除按钮中删除 全部清除 操作传单抽奖编辑工具栏 我知道你可以删除整个delete按钮 但仍需要删除个别项目 基本上寻找一种方法来防止用户删除地图中的每个项目 编辑工具栏测试是否存在removeAllLayers按钮处理程序上的成员
  • Python PIL 成像库 FileNotFoundError

    我目前正在开发一个 tkinter GUI 项目 该项目接收用户的平均值并将其返回给他们 我希望使用 PIL 库在我的父窗口中显示图像 昨天这个库工作正常并在目录中找到我的图像 但今天似乎无法找到该目录 有人可以帮助我并指导我 我不知道为什
  • 每个框中带有标签的马赛克图,显示所有观察值的名称和百分比

    我想创建一个马赛克图 R 包 vcd 请参见例如http cran r project org web packages vcd vignettes residual shadings pdf 在绘图内带有标签 标签应显示各种因素的组合或一
  • Docker/LXC 容器是正在运行的应用程序还是内存中的东西?

    我刚刚读了优秀的SO问题 Docker 和虚拟机有什么区别 然而 被接受的答案让我想要更多一点 I sort of了解容器 Docker LXC 我不明白其中的区别 来使用称为libcontainer和 AuFS 使数十个 数百个甚至数千个
  • 如何在 Thymeleaf 中分割字符串

    我有像这样的图像名称wange 25011 jpg wange 25011 1 jpg或 null 我想将它们拆分为wange 25011 jpg and wange 25011 1 jpg 或者如果为空则不拆分 我尝试了如下代码 但没有工
  • Retrofit 2 和 RxJava 错误处理运算符

    我在我的项目中使用 Retrofit 2 以及 Observable 接口和 Result 包装器 例子 POST api login Observable
  • 以编程方式设置 ConstraintLayout 宽度以匹配父宽度

    在 Android 应用程序中 我尝试以编程方式添加自定义ConstraintLayout垂直方向的视图LinearLayout 我设置了LayoutParams to MATCH PARENT对于宽度和WRAP CONTENT对于高度在C
  • 如何让 ELMAH 与 ASP.NET MVC [HandleError] 属性一起使用?

    我正在尝试使用 ELMAH 记录 ASP NET MVC 应用程序中的错误 但是当我在控制器上使用 HandleError 属性时 ELMAH 在发生错误时不会记录任何错误 正如我猜测的那样 因为 ELMAH 只记录未处理的错误 并且 Ha
  • jQuery 与原生原型冲突

    我在使用 jQuery 和本机 JavaScript 时遇到问题 NOT原型 js 当使用以下代码时 jQuery 1 9 1 出现错误消息 Object prototype myVeryGreatFunction function Err
  • 为什么 GitHub 可能会报告公钥无效? [关闭]

    Closed 这个问题是无关 目前不接受答案 我已经生成了 ssh 密钥 结果是 Your identification has been saved in home rajani ssh id rsa Your public key ha
  • 从 Chrome 开发工具中的网络选项卡预览复制变量

    我正在使用 Chrome 开发工具 并通过网络窗格进行挖掘 以通过预览选项卡查看 XHR 响应 我想从预览中抓取一个特定的对象 但当我尝试存储为全局变量通过右键单击预览对象 创建的临时变量为空 我觉得这很奇怪 因为数据在内存中 否则根本不会
  • Python:如何使用 DictReader 两次?

    这感觉像是一个非常基本的问题 但我在其他地方找不到任何提及 我是一个 Python 初学者 当我使用 DictReader 读取数据 然后使用字典时 我无法再次引用它 例如 使用以下代码 usr bin python import csv
  • 箱线图屏蔽数组

    如何仅对 MaskedArray 的非屏蔽值进行箱线图 我以为这会自动发生boxplot ma 但这似乎是对非屏蔽数组进行箱线图 我想你是对的 plt boxplot如果发送掩码数组 则忽略掩码 所以看起来你必须付出boxplot通过仅发送
  • 如何连接 React 键的字符串?

    我正在创建一个列表列表 并希望为每个元素添加一个唯一的键 当我使用 React Dev Tool 时 新键是 2016 10 football 为什么里面有逗号 当我想要 2016 10 football 时指定键的正确方法是什么 Reac
  • Flutter StreamBuilder 在初始化时调用两次

    StreamBuilder 总是被调用两次吗 一次用于初始数据 然后一次用于输入流 初始化下面的StreamBuilder可以看出build方法被调用了两次 第二次调用比第一次调用晚了 0 4 秒 流 内部版本 1566239814897
  • SASS 连接类名?

    我从中得到了一个 LESS 文件日期选择器插件并想将其转换为 SASS 但在 LESS 中 它连接了一个类名 如下所示 LESS dropdown inline Result dropdown inline 我在 SASS 中尝试了很多东西
  • 图像直方图的高斯混合模型

    我正在尝试根据像素强度值对 2D MR 图像的不同区域进行自动图像分割 第一步是在图像的直方图上实现高斯混合模型 我需要绘制从获得的结果高斯score samples方法到直方图上 我尝试按照答案中的代码进行操作 了解高斯混合模型 Howe
  • 如何将人造丝的 .par_iter() 与泛型向量一起使用?

    这是一个人为的例子 但我相信如果我能让这个工作正常 我可以将其应用到我的具体案例中 extern crate num extern crate rayon use rayon prelude use num Float fn sqrts