小编Ric*_*ick的帖子

我可以从multiprocessing.Process获得返回值吗?

我使用Python多处理模块在蒙特卡罗代码中实现了一些简单的并行性.我的代码看起来像:

montecarlos = [MonteCarlo(f,fargs) for fargs in farglist]
jobs = [multiprocessing.Process(mc) for mc in montecarlos]
for job in jobs: job.start()
for job in jobs: job.join()
results = [mc.results for mc in montecarlos]
Run Code Online (Sandbox Code Playgroud)

但是,当我查看结果列表时,看起来monte carlo迭代器甚至还没有开始.我知道他们有,因为我可以在monte carlo步骤中打印出信息.所以我做的事情是愚蠢的.我原以为job.join()会保留结果列表,直到所有内容都运行,因此mc.results字段会被更新.

我意识到我没有告诉你我的蒙特卡洛例程的细节,并希望它没关系,而我所犯的错误在于我对多处理工作的解释.提前感谢您提供的任何帮助.

python multiprocessing

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

如何在不安装的情况下测试我的python模块

我正在重新设计/重构我的Python量子化学包(pyquante).我不喜欢现有版本的一件事是我必须安装软件包才能运行测试套件.也就是说,测试套件有类似的声明from PyQuante import SCF,当然,这个PyQuante可以引用已安装的版本或本地版本.

我知道virtualenv,并意识到这是我的选择.但我想知道其他什么是合适的.在过去,我已经破解sys.path了这样的事情,而且更好的Python程序员告诉我,我不应该这样做.

有没有人对我如何做到这一点有任何建议?关键是我想测试当前版本的代码而不安装它.

提前感谢任何能够看透我的bab呀声并提供建议的人!

python testing

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

使用单元测试中的doctests

我通常在我的模块中编写单元测试和doctests.我想在运行测试套件时自动运行我的所有doctests.我认为这是可能的,但我在语法上遇到了困难.

我有测试套件

import unittest
class ts(unittest.TestCase):
    def test_null(self): self.assertTrue(True)
if __name__ == '__main__': unittest.main()
Run Code Online (Sandbox Code Playgroud)

我想在这个套件中添加模块中的所有doctests module1.我怎样才能做到这一点?我已经阅读了python文档,但是我在这里并没有更接近成功.添加线条

import doctest
import module1
suite = doctest.DocTestSuite(module1)
Run Code Online (Sandbox Code Playgroud)

不起作用.unittest.main()通过当前的文件范围和运行每个测试的搜索情况下,它发现,对不对?但是DocTestSuite会生成一个测试套件.如何unittest.main()在套件中运行其他案例?或者我只是困惑和迷惑?

再一次,我会感激任何人都可以提供的任何帮助.

python

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

Cython:无法将Python对象转换为'double*'

我正在写一个Cthon函数的Cython包装器.我有一个带有以下签名的pxd文件:

double contr_hrr(int lena, double xa, double ya, double za, double *anorms)
Run Code Online (Sandbox Code Playgroud)

当我尝试从pyx文件中调用它时

...
return contr_hrr(len(acoefs),a.origin[0],a.origin[1],a.origin[2],anorms2)
Run Code Online (Sandbox Code Playgroud)

其中anorms2是一个python列表,我收到错误消息:

cython/ctwo.pyx:35:80: Cannot convert Python object to 'double *'
Run Code Online (Sandbox Code Playgroud)

如何将python列表作为双数组传递给C函数?

python arrays list cython

9
推荐指数
1
解决办法
6844
查看次数

将字符转换为整数的更简单方法?

仍然对Julia标准库中的内容有所了解.我可以通过int()函数将字符串转换为它们的整数表示,但是当我用char调用int()时,我得到对应于该字符的整数值.目前我首先调用string():

intval = int(string(c))
Run Code Online (Sandbox Code Playgroud)

这是接受的方式吗?还是有更标准的方法?它在我的Project Euler练习中出现了很多.

julia

7
推荐指数
1
解决办法
4602
查看次数

使用`map`构造多个命名元组

假设我有一个像这样的名字

>>> Point = namedtuple('Point','x y')
Run Code Online (Sandbox Code Playgroud)

为什么我通过构造单个对象

>>> Point(3,4)
Run Code Online (Sandbox Code Playgroud)

但是当我想通过地图应用Point时,我必须打电话

>>> map(Point._make,[(3,4),(5,6)])
Run Code Online (Sandbox Code Playgroud)

我怀疑这可能与类方法有关,我希望在搞清楚这一点时我也会更多地了解它们.提前致谢.

python

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

将Excel行,列索引转换为python / openpyxl中的字母数字单元格引用

我想将行索引和列索引转换为Excel字母数字单元格引用,例如“ A1”。我正在使用python和openpyxl,我怀疑该程序包中的某个地方可以执行此操作,但是经过一些搜索后我什么都没找到。

我写了下面的代码,它可以工作,但是我宁愿使用openpyxl软件包中的一部分(如果有的话)。

def xlref(row,column):
    """
    xlref - Simple conversion of row, column to an excel string format

    >>> xlref(0,0)
    'A1'
    >>> xlref(0,26)
    'AA1'
    """
    def columns(column):
        from string import uppercase
        if column > 26**3:
            raise Exception("xlref only supports columns < 26^3")
        c2chars = [''] + list(uppercase)
        c2,c1 = divmod(column,26)
        c3,c2 = divmod(c2,26)
        return "%s%s%s" % (c2chars[c3],c2chars[c2],uppercase[c1])
    return "%s%d" % (columns(column),row+1)
Run Code Online (Sandbox Code Playgroud)

有人知道更好的方法吗?

python excel openpyxl

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

在运行时设置默认值

我管理着一个相当大的基于python的量子化学套件PyQuante.我目前正在努力设置各种默认设置,以便用户可以在运行时选择不同的选项.

例如,我有三种不同的计算电子排斥积分的方法.我们称他们为a,b,c.我过去只是选择我最喜欢的那个(比方说,c),并将其硬连接到计算这些积分的模块中.

我现在修改了它以使用包含所有这些硬线的模块Defaults.py.但这是在编译/安装时设置的.我现在希望用户能够在运行时覆盖这些选项,比如使用.pyquanterc.py文件.

在我的整体惯例中,我目前有类似的东西

from Defaults import integral_method
Run Code Online (Sandbox Code Playgroud)

我知道字典和.update()方法.但我不知道如何在现实生活中使用它.我的默认模块看起来像

integral_method = c
Run Code Online (Sandbox Code Playgroud)

我应该修改Defaults.py的结尾来查找.pythonrc.py文件并覆盖这些值吗?例如

if os.path.exists('$HOME/.pythonrc.py'): do_something
Run Code Online (Sandbox Code Playgroud)

如果是这样,应该做什么样的东西?

python

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

计算numpy数组的平方距离

我正在脑力衰竭,但我无法让它发挥作用.我有一系列的距离:

import numpy as np
zvals = np.linspace(-5,5,10)
d = np.array([(0,0,z) for z in zvals])
Run Code Online (Sandbox Code Playgroud)

我想计算数组中点的平方距离.实现这项工作的非笨拙方式是:

d2 = np.array([np.dot(d[i,:],d[i,:]) for i in range(d.shape[0])])
Run Code Online (Sandbox Code Playgroud)

但是,我知道必须有一些方法可以通过一次调用dot来做到这一点,对吧?话既然说,也没有

d2 = np.dot(d,d.T)
Run Code Online (Sandbox Code Playgroud)

要么

d2 = np.dot(d.T,d)
Run Code Online (Sandbox Code Playgroud)

给我想要的东西.我意识到,我是傻瓜,但请在这里赐教.谢谢!

python numpy

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

将多行字符串解析为数组

我试图抓住朱莉娅,来自Python.目前正在解决一些Project Euler问题,我在Julia中使用Python解决了这个问题,以便更好地理解语言.我做了很多事情(在Project Euler和现实生活中)是将一个大的多线数据对象解析成一个数组.例如,如果我有数据

data = """1 2 3 4
5 6 7 8
9 0 1 2"""
Run Code Online (Sandbox Code Playgroud)

在python我可能会这样做

def parse(input):
    output = []
    for line in input.splitlines():
         output.append(map(int,line.split()))
    return np.array(output)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止在朱莉娅所拥有的:

function parse(input)
    nrow = ncol = 0
    # Count first
    for row=split(input,'\n')
        nrow += 1
        ncol = max(ncol,length(split(row)))
    end

    output = zeros(Int64,(nrow,ncol))
    for (i,row) in enumerate(split(input,'\n'))
        for (j,word) in enumerate(split(row))
            output[i,j] = int(word)
        end
    end
    return output
end
Run Code Online (Sandbox Code Playgroud)

什么是朱莉娅版的"pythonic"叫做?无论是什么,我都不认为我这样做.我很确定有一种方法可以(1)不必两次传递数据,(2)不必如此具体地分配数组.我试了一下hcat/vcat,没有运气.

我欢迎解决这个问题的建议.我也有兴趣参考适当的Julia风格(julia-onic?)和一般语言使用实践.谢谢!

julia

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

标签 统计

python ×8

julia ×2

arrays ×1

cython ×1

excel ×1

list ×1

multiprocessing ×1

numpy ×1

openpyxl ×1

testing ×1