我需要将存储的半浮点数(16位)转换为标准的32位浮点数.我目前使用下面的代码,但它依赖于libc.我只想使用std,它应该适用于稳定的Rust.
#[inline]
fn decode_f16(half: u16) -> f32 {
let exp: u16 = half >> 10 & 0x1f;
let mant: u16 = half & 0x3ff;
let val: f32 = if exp == 0 {
ffi::c_ldexpf(mant as f32, -24)
} else if exp != 31 {
ffi::c_ldexpf(mant as f32 + 1024f32, exp as isize - 25)
} else if mant == 0 {
::std::f32::INFINITY
} else {
::std::f32::NAN
};
if half & 0x8000 != 0 {
-val
} else { …Run Code Online (Sandbox Code Playgroud) 我有一个带有一些值的球拍列表(list 'foo 'bar 2 #t 42 9 2 'some).实际上,这些值遵循一些更具体的模式,但对于这个问题,这是无关紧要的.我想测试测试列表中是否有两个相同的值,在这种情况下是数字2,并获取元素和其他元素.这是我的尝试:
#lang racket
(match (list 'foo 'bar 2 #t 42 9 2 'some)
[(list-no-order a a rest ...)
"Do some stuff"]
[_ "Do some other stuff"])
Run Code Online (Sandbox Code Playgroud)
模式是(list-no-order a a rest ...).但该计划的解释失败了:
a11: unbound identifier;
also, no #%top syntax transformer is bound in: a11
Run Code Online (Sandbox Code Playgroud)
对我来说,转换宏时看起来是错误的.如果一个人改变list-no-order对list模式工作,但当然只是如果这些元素在列表的开头.
我的模式是错误的,如果是这样,如何纠正它或者是不可能的预期模式,解决它的最佳方法是什么?
gigaword 数据集是一个巨大的语料库,用于训练抽象摘要模型。它包含如下摘要:
spain 's colonial posts #.## billion euro loss
taiwan shares close down #.## percent
Run Code Online (Sandbox Code Playgroud)
我想用spacy处理这些摘要,并为每个令牌获取正确的 pos 标签。问题是数据集中的所有数字都被替换为 # 符号,spacy 不会将其归类为数字 ( NUM ) 而是其他标签。
>>> import spacy
>>> from spacy.tokens import Doc
>>> nlp = spacy.load("en_core_web_sm")
>>> nlp.tokenizer = lambda raw: Doc(nlp.vocab, words=raw.split(' '))
>>> text = "spain 's colonial posts #.## billion euro loss"
>>> doc = nlp(text)
>>> [(token.text, token.pos_) for token in doc]
[('spain', 'PROPN'), ("'s", 'PART'), ('colonial', 'ADJ'), ('posts', 'NOUN'), ('#.##', 'PROPN'), …Run Code Online (Sandbox Code Playgroud) Rust 为字符串提供了一种修剪方法:str.trim()删除前导和尾随空格。我想要一种对字节串执行相同操作的方法。它应该Vec<u8>删除前导和尾随空格(空格,0x20 和 htab,0x09)。
编写一个trim_left()很容易,你可以使用一个迭代器skip_while():Rust Playground
fn main() {
let a: &[u8] = b" fo o ";
let b: Vec<u8> = a.iter().map(|x| x.clone()).skip_while(|x| x == &0x20 || x == &0x09).collect();
println!("{:?}", b);
}
Run Code Online (Sandbox Code Playgroud)
但是要修剪正确的字符,如果在找到空格后列表中没有其他字母,我需要向前看。
我有一个let mut stack: Vec<usize> = vec![5, 7, 1]不同的长度。在程序的某个时刻,我想将 the 的最后一个元素stack加一。我试过stack.last_mut().unwrap() += 1(我知道stack不会为空)但编译器抱怨
error: binary assignment operation `+=` cannot be applied to type `&mut _` [--explain E0368]
--> src/main.rs:3:5
3 |> stack.last_mut().unwrap() += 1;
|> ^^^^^^^^^^^^^^^^^^^^^^^^^
error: invalid left-hand side expression [--explain E0067]
--> src/main.rs:3:5
3 |> stack.last_mut().unwrap() += 1;
|> ^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
当然我可以先从堆栈中弹出最后一个元素,增加它并再次添加它,但有没有更简单的方法?