相关疑难解决方法(0)

使用numpy构建两个数组的所有组合的数组

我试图在6参数函数的参数空间上运行以研究它的数值行为,然后再尝试做任何复杂的事情,所以我正在寻找一种有效的方法来做到这一点.

给定6-dim numpy数组作为输入,我的函数采用浮点值.我最初尝试做的是:

首先,我创建了一个函数,它接受2个数组并生成一个数组,其中包含来自两个数组的所有值组合

from numpy import *
def comb(a,b):
    c = []
    for i in a:
        for j in b:
            c.append(r_[i,j])
    return c
Run Code Online (Sandbox Code Playgroud)

然后我习惯reduce()将它应用于相同数组的m个副本:

def combs(a,m):
    return reduce(comb,[a]*m)
Run Code Online (Sandbox Code Playgroud)

然后我评估我的功能如下:

values = combs(np.arange(0,1,0.1),6)
for val in values:
    print F(val)
Run Code Online (Sandbox Code Playgroud)

这有效,但它太慢了.我知道参数的空间很大,但这不应该太慢.在这个例子中我只抽取了10 6(一百万)个点,并且创建数组花了超过15秒values.

你知道用numpy做这个更有效的方法吗?

F如果有必要,我可以修改函数获取它的参数的方式.

python arrays numpy multidimensional-array

132
推荐指数
9
解决办法
10万
查看次数

在Python中使用快速循环的最平台和Python版本最独立的方法是什么?

我正在用Python编写一个科学应用程序,其核心是一个处理器密集型循环.我希望尽可能优化这一点,对最终用户至少造成不便,最终用户可能会将其用作未编译的Python脚本集合,并将使用Windows,Mac和(主要是Ubuntu)Linux.

它目前用Python编写,带有一些NumPy,我已经包含了下面的代码.

  1. 是否有一个合理快速的解决方案,不需要编译?这似乎是保持平台独立性的最简单方法.
  2. 如果使用像Pyrex这样需要编译的东西,是否有一种简单的方法来捆绑许多模块,并根据检测到的操作系统和Python版本让Python在它们之间做出选择?是否有一种简单的方法来构建模块集合而无需访问每个版本的Python的每个系统?
  3. 一种方法是否特别适合多处理器优化?

(如果你有兴趣,环路是加入了大量附近的磁性离子的贡献一起计算在晶体内给定点的磁场,当作小酒吧磁铁.基本上,一个巨大的总和这些. )

# calculate_dipole
# -------------------------
# calculate_dipole works out the dipole field at a given point within the crystal unit cell
# ---
# INPUT
# mu = position at which to calculate the dipole field
# r_i = array of atomic positions
# mom_i = corresponding array of magnetic moments
# ---
# OUTPUT
# B = the B-field at this point

def calculate_dipole(mu, r_i, mom_i):
    relative = mu - r_i …
Run Code Online (Sandbox Code Playgroud)

python optimization

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