小编Dem*_*nov的帖子

Python中的multiprocessing.dummy没有使用100%的cpu

我正在用Python做一个机器学习项目,所以我必须做并行预测功能,我在我的程序中使用它.

from multiprocessing.dummy import Pool
from multiprocessing import cpu_count


def multi_predict(X, predict, *args, **kwargs):
    pool = Pool(cpu_count())
    results = pool.map(predict, X)
    pool.close()
    pool.join()
    return results
Run Code Online (Sandbox Code Playgroud)

问题是我所有的CPU只加载了20-40%(总计为100%).我使用multiprocessing.dummy,因为我在pickling函数中遇到了多处理模块的问题.

python parallel-processing multiprocessing

34
推荐指数
1
解决办法
2万
查看次数

sklearn:用户定义的时间序列数据交叉验证

我正在努力解决机器学习问题.我有一个具有时间序列元素的特定数据集.对于这个问题,我正在使用着名的python库 - sklearn.这个库中有很多交叉验证迭代器.还有几个迭代器可以自己定义交叉验证.问题是我真的不知道如何为时间序列定义简单的交叉验证.这是我想要得到的一个很好的例子:

假设我们有几个句点(年),我们想将我们的数据集分成几个块,如下所示:

data = [1, 2, 3, 4, 5, 6, 7]

train: [1]                test: [2] (or test: [2, 3, 4, 5, 6, 7])
train: [1, 2]             test: [3] (or test: [3, 4, 5, 6, 7])
train: [1, 2, 3]          test: [4] (or test: [4, 5, 6, 7])
...
train: [1, 2, 3, 4, 5, 6] test: [7]
Run Code Online (Sandbox Code Playgroud)

我无法真正理解如何使用sklearn工具创建这种交叉验证.也许我应该用PredefinedSplitsklearn.cross_validation这样的:

train_fraction  = 0.8
train_size      = int(train_fraction * X_train.shape[0])
validation_size = X_train.shape[0] - train_size …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn cross-validation

10
推荐指数
1
解决办法
4112
查看次数

从字典创建类实例?

我试图从字典创建类实例,其中包含多个类具有属性的键.我已经从这个链接读了相同问题的答案:从字典创建类实例属性?.问题是我无法__init__在我想要的类定义中编写,因为我使用的是SQLAlchemy声明式样式类定义.还会type('className', (object,), dict)创建不需要的错误属性.这是我找到的解决方案:

dict = {'key1': 'value1', 'key2': 'value2'}
object = MyClass(**dict)
Run Code Online (Sandbox Code Playgroud)

但是如果dict有冗余密钥,它就不起作用:

dict = {'key1': 'value1', 'key2': 'value2', 'redundant_key': 'redundant_value'}
object = MyClass(**dict) # here need to ignore redundant_key
Run Code Online (Sandbox Code Playgroud)

除了直接删除所有冗余密钥外,还有其他解决方案dict吗?

python dictionary sqlalchemy class

6
推荐指数
1
解决办法
4849
查看次数

按相反顺序排序."不要重复自己"的规则

这是一段执行插入排序的C++代码:

#ifndef INSERTIONSORT
#define INSERTIONSORT

template<class T> 
void insertionSort(T* elements, int size, int reverse = 0) {
    T tempElement;
    int j;

    for (int i = 0; i < size; ++i) {
        tempElement = elements[i];

        for (j = i - 1; j >= 0 && elements[j] > tempElement; j--)
            elements[j + 1] = elements[j];

        elements[j + 1] = tempElement;
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)

没有重复代码,我不能写它.这不是我第一次遇到这种问题.我需要的是替换<>,when reverse= 1.我尝试的第一种方法是使用三元运算符:

(repeat)?(elements[j] > tempElement):(elements[j] < tempElement)

它看起来有点奇怪,我知道它不是解决问题的最佳方法,所以我尝试了这个:

elements[j] (reverse)?(<):(>) tempElement

但它不正确,不起作用.此外,三元运算符使if语句中的基本运算数增加了一倍.我知道它只是一个插入排序,它执行Θ(n ^ …

c++ sorting reverse dry ternary-operator

3
推荐指数
1
解决办法
176
查看次数