小编5xu*_*xum的帖子

Python多处理不会产生预期的加速

我正在尝试使用Python的multiprocessing.Pool模块优化我的代码,但我没有得到我逻辑上期望的加速结果.

我正在做的主要方法涉及计算大量向量的矩阵向量积和固定的大稀疏矩阵.下面是一个玩具示例,它执行我需要的,但随机矩阵.

import time
import numpy as np
import scipy.sparse as sp

def calculate(vector, matrix = None):
    for i in range(50):
        v = matrix.dot(vector)
    return v

if __name__ == '__main__':
    N = 1e6
    matrix = sp.rand(N, N, density = 1e-5, format = 'csr')
    t = time.time()
    res = []
    for i in range(10):
        res.append(calculate(np.random.rand(N), matrix = matrix))    
    print time.time() - t
Run Code Online (Sandbox Code Playgroud)

该方法在大约30几秒钟内终止.

现在,由于每个元素的计算results不依赖于任何其他计算的结果,因此很自然地认为并行计算将加速该过程.我们的想法是创建4个流程,如果每个流程都进行一些计算,那么所有流程完成所需的时间应该减少一些因素4.为此,我编写了以下代码:

import time
import numpy as np
import scipy.sparse as …
Run Code Online (Sandbox Code Playgroud)

python performance python-multiprocessing

5
推荐指数
1
解决办法
1482
查看次数

强制 rdflib 定义命名空间

我开始使用该rdflib库在 Python 中处理 rdf 数据。目前,我想创建一个.n3rdf 图的文件,如下所示:

@prefix ns1: <http://some.namespace/with/name#> .
@prefix ns2: <http://second.namespace/some/name#>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<my_example> ns1:annotated_with [ ns1:annotation
        ns2: annotation_value> ] ;
    ns1:name "myname" .
Run Code Online (Sandbox Code Playgroud)

也就是说,该图中有一个名为 的示例my_example,其名称为“myname”。此示例使用注释值为 的对象进行注释annotation value。我想用 Python 构建这个示例,如下所示:

import rdflib

gg=rdflib.graph.Graph()
ns1 = rdflib.Namespace('http://some.namespace/with/name#')
ns2 = rdflib.Namespace('http://second.namespace/some/name#')
u = rdflib.term.URIRef('my_example')
gg.add((u, ns1.name, rdflib.Literal('myname')))
blank = rdflib.BNode()
gg.add((u, ns1.annotated_with, blank))
gg.add((blank, ns1.annotation, ns2.annotation_value))

print gg.serialize(format='n3') …
Run Code Online (Sandbox Code Playgroud)

python rdf rdflib

5
推荐指数
1
解决办法
3629
查看次数

同时验证两个字段

我正在查看这段文档:

清理和验证相互依赖的字段

该文档解释了如何完成字段依赖,但我有一个稍微不同的问题:

假设我有一个包含两个字段的模型:

class MyModel(models.Model):
    field1 = models.CharField(max_length=200)
    field2 = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

并说两个字段之一是隐藏的,所以模型表单看起来像这样:

class MyModelForm(forms.ModelForm):
    class Meta:
        ...

        widgets = {'field2': forms.HiddenImput()}
Run Code Online (Sandbox Code Playgroud)

现在,当用户填写表单时,我 (on clean_field1) 也填写field2. 现在,我想将发生的任何错误报告field2为关于field1. 这是因为此刻,用户不知道自己做错了什么!

我试图做的是,在 ModelForm 定义中:

def clean(self):
    cleaned_data = super(MyModelForm, self).clean()
    # Do something here
    return cleaned_data
Run Code Online (Sandbox Code Playgroud)

因为这是 Django 页面上显示的内容。但是,问题是clean方法执行的时候,字典self.errors是空的,不知道怎么办……

django django-models

5
推荐指数
1
解决办法
3401
查看次数

在`r`的`插入符号'包中训练测试分裂

我已经熟悉了它rcaret软件包,但是,从其他编程语言来看,它让我很困惑.

我现在想做的是一个相当简单的机器学习工作流程,它是:

  1. 采取训练集,在我的例子中是虹膜数据集
  2. 将其拆分为训练和测试集(80-20分割)
  3. 对于每一个k120,训练k近邻分类训练集
  4. 在测试装置上测试它

我知道如何做第一部分,因为iris已经加载了.然后,第二部分通过调用完成

a <- createDataPartition(iris$Species, list=FALSE)
training <- iris[a,]
test <- iris[-a,]
Run Code Online (Sandbox Code Playgroud)

现在,我也知道我可以通过调用训练模型

library(caret)
knnFit <- train()
knnFit <- train(Species~., data=training, method="knn")
Run Code Online (Sandbox Code Playgroud)

但是,这将导致r已对参数执行某些优化k.当然,我可以限制k该方法应该尝试的值,例如

knnFit <- train(Species~., data=training, method="knn", tuneGrid=data.frame(k=1:20))
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,但它仍然不是我想要它做的.这个代码现在将为每个代码执行k:

  1. 从中获取一个自助样本test.
  2. k使用给定的样本评估-nn方法的性能

我想要它做什么:

  1. 对于每个人k,在我之前建造的同一列车上训练模型
  2. 在我之前构建的相同测试集上评估性能**.

所以我需要类似的东西

knnFit <- train(Species~., training_data=training, test_data=test, method="knn", tuneGrid=data.frame(k=1:20))
Run Code Online (Sandbox Code Playgroud)

但这当然不起作用.

我知道我应该对trainControl …

r r-caret

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

Python对shell字符串的处理

我仍然不完全理解python的unicode和str类型是如何工作的.注意:我在Python 2中工作,据我所知,Python 3对同一问题有完全不同的方法.

我所知道的:

str 是一种较老的野兽,可以保存由历史迫使我们使用的太多编码之一编码的字符串.

unicode 是一种更标准化的方式来表示字符串使用一个巨大的表格,包括所有可能的字符,表情符号,狗屎的小图片等等.

decode函数将字符串转换为unicode,反之亦然encode.

如果我,在python的shell中,只需说:

>>> my_string = "some string"
Run Code Online (Sandbox Code Playgroud)

然后my_string是一个str编码的变量ascii(并且,因为ascii是utf-8的子集,它也被编码utf-8).

因此,例如,我可以unicode通过说出其中一行来将其转换为变量:

>>> my_string.decode('ascii')
u'some string'  
>>> my_string.decode('utf-8')
u'some string'  
Run Code Online (Sandbox Code Playgroud)

我不知道的是:

Python如何处理在shell中传递的非ascii字符串,并且知道这一点,保存单词的正确方法是"kožuš?ek"什么?

例如,我可以说

>>> s1 = 'kožuš?ek'
Run Code Online (Sandbox Code Playgroud)

在这种情况下s1成为str我无法转换为的实例unicode:

>>> s1='kožuš?ek'
>>> s1
'ko\x9eu\x9a\xe8ek'
>>> print s1
kožuš?ek
>>> s1.decode('ascii')

Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    s1.decode('ascii') …
Run Code Online (Sandbox Code Playgroud)

string unicode encoding utf-8 python-2.x

4
推荐指数
1
解决办法
896
查看次数

没有Flexbox的CSS元素的中央对齐

我遇到了使文本显示在网页中间(高度方向)的问题。该网站的HTML是:

<html lang="en">
    <head>
        <title>example</title>
        <link href="example.css" rel="stylesheet">
    </head>

    <body>        
        <div class="home-container">
            <div class="home-row">
                <div class="some-other-class">
                    <p>text that should be in the middle</p>
                </div>
            </div>
        </div> 
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想做的是让home-container元素一直延伸到页面底部,并在页面text that should be in the middle中间。我的css样子是:

html, body{
    height:100%;
}


.home-container{
    width: 100%;
    height: 100%;
    background-color: rgba(139,0,0,0.4);
}

.home-row{
    vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)

我知道,如果我做home-container这样的话,我想做的事情是可能的:

.home-container{
    width: 100%;
    height: 100%;
    background-color: rgba(139,0,0,0.4);
    align-items: center;
    display: flex;
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于所有浏览器。我在做错什么vertical-align物业?在我的示例中,Id并没有真正做任何事情...

html css

4
推荐指数
3
解决办法
7910
查看次数

附加到字典值,pythonesque解决方案

通常,T在python中形成一个字典,其键是动态插入的,值是某种列表:

dc = {'foo': [1,2,3], 'bar': [2,3,4]}
Run Code Online (Sandbox Code Playgroud)

然而,这样的字典的产生对我来说是有问题的.例如,假设我正在浏览此列表:

l = [('foo', 1),('foo', 2),('foo', 3), ('bar', 2), ('bar', 3), ('bar', 4)]
Run Code Online (Sandbox Code Playgroud)

我希望我的程序dc从上面生成字典.现在,我唯一的代码是:

dc = {}
for key, value in l:
    if dc.has_key(key):
         dc[key].append(value)
    else:
         dc[key] = value
Run Code Online (Sandbox Code Playgroud)

有更多pythonesque方式这样做?这里有很多代码可以真正被压缩成一条简单的线,而不是繁琐和/或慢......

编辑l上面的列表是用于说明的.事实上,我经常浏览一个大文件,并在文件的每一行中找到一个键值对,因此调用dict(l)不是一个选项.

python dictionary

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