小编Ned*_*eri的帖子

如何将对堆栈变量的引用传递给线程?

我正在编写一个WebSocket服务器,其中一个Web客户端连接到多线程计算机AI上下棋.WebSocket服务器想要将Logger对象传递给AI代码.该Logger对象将管理从AI到Web客户端的日志行.在Logger必须包含对客户端连接的参考.

我对生命周期如何与线程交互感到困惑.我用Wrapper类型参数化的结构重现了这个问题.该run_thread函数尝试解包该值并记录它.

use std::fmt::Debug;
use std::thread;

struct Wrapper<T: Debug> {
    val: T,
}

fn run_thread<T: Debug>(wrapper: Wrapper<T>) {
    let thr = thread::spawn(move || {
        println!("{:?}", wrapper.val);
    });

    thr.join();
}

fn main() {
    run_thread(Wrapper::<i32> { val: -1 });
}
Run Code Online (Sandbox Code Playgroud)

wrapper参数存在于堆栈中,并且它的生命周期不会延伸超过run_thread堆栈帧,即使该线程将在堆栈帧结束之前连接.我可以从堆栈中复制值:

use std::fmt::Debug;
use std::thread;

struct Wrapper<T: Debug + Send> {
    val: T,
}

fn run_thread<T: Debug + Send + 'static>(wrapper: Wrapper<T>) {
    let thr = thread::spawn(move || …
Run Code Online (Sandbox Code Playgroud)

rust

22
推荐指数
1
解决办法
3771
查看次数

如何将sklearn.naive_bayes与(多个)分类功能一起使用?

我想学习Naive Bayes模型,解决类是布尔值的问题(取两个值中的一个).某些功能是布尔值,但其他功能是分类的,可以采用少量值(~5).

如果我的所有功能都是布尔值,那么我想使用sklearn.naive_bayes.BernoulliNB.似乎很清楚,sklearn.naive_bayes.MultinomialNB不是我想要的.

一种解决方案是将我的分类特征拆分为布尔特征.例如,如果变量"X"取值"红色","绿色","蓝色",我可以有三个变量:"X是红色","X是绿色","X是蓝色".这违反了给予类的变量的条件独立性假设,因此它似乎完全不合适.

另一种可能性是将变量编码为实值变量,其中0.0表示红色,1.0表示绿色,2.0表示蓝色.这似乎完全不适合使用GaussianNB(出于显而易见的原因).

我想要做的事情似乎并不奇怪,但我不明白如何将它融入sklearn给我的Naive Bayes模型中.我自己编写代码很容易,但是如果可能的话,我更喜欢使用sklearn,原因很明显(大多数:避免错误).

[编辑解释为什么我不认为多项式NB是我想要的]:

我的理解是,在多项式NB中,特征向量包括在kiid样本中观察到令牌的次数.

我的理解是,这适用于分类文档,其中存在基础类文档,然后假定文档中的每个单词都是从特定于该类的分类分布中提取的.文档将具有k令牌,特征向量的长度将等于词汇量大小,并且特征计数的总和将是k.

就我而言,我有一些bernoulli变量,加上几个分类变量.但这里没有"计数"的概念.

示例:课程是喜欢或不喜欢数学的人.预测因子是大学专业(分类)以及他们是否进入研究生院(布尔).

我认为这不符合多项式,因为这里没有任何重要性.

statistics machine-learning scikit-learn naivebayes

19
推荐指数
1
解决办法
5146
查看次数

将Rc <ConcreteType>转换为Rc <Trait>

Horse是一个实现Animal特征的结构.我有一个Rc<Horse>和一个需要接受的功能Rc<Animal>,所以我想转换Rc<Horse>Rc<Animal>.

我这样做了:

use std::rc::Rc;

struct Horse;

trait Animal {}

impl Animal for Horse {}

fn main() {
    let horse = Rc::new(Horse);
    let animal = unsafe {
        // Consume the Rc<Horse>
        let ptr = Rc::into_raw(horse);
        // Now it's an Rc<Animal> pointing to the same data!
        Rc::<Animal>::from_raw(ptr)
    };
}
Run Code Online (Sandbox Code Playgroud)

这是一个好的解决方案吗?这是对的吗?

casting rust

2
推荐指数
2
解决办法
165
查看次数