我试图在尝试对6参数函数进行任何复杂操作之前,遍历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
然后,我曾经reduce()
将其应用于同一数组的m个副本:
def combs(a,m):
return reduce(comb,[a]*m)
最后,我这样评估我的功能:
values = combs(np.arange(0,1,0.1),6)
for val in values:
print F(val)
这工作,但它的方式过于缓慢。我知道参数的空间很大,但这不应该太慢。在此示例中,我仅采样了10 6(一百万)个点,仅花费了15秒钟以上的时间便创建了数组values
。
您知道使用numpy进行此操作的更有效的方法吗?
F
如果需要,我可以修改函数接受参数的方式。
在numpy
(> 1.8.x)的较新版本中,numpy.meshgrid()
提供了更快的实现:
@PV的解决方案
In [113]:
%timeit cartesian(([1, 2, 3], [4, 5], [6, 7]))
10000 loops, best of 3: 135 µs per loop
In [114]:
cartesian(([1, 2, 3], [4, 5], [6, 7]))
Out[114]:
array([[1, 4, 6],
[1, 4, 7],
[1, 5, 6],
[1, 5, 7],
[2, 4, 6],
[2, 4, 7],
[2, 5, 6],
[2, 5, 7],
[3, 4, 6],
[3, 4, 7],
[3, 5, 6],
[3, 5, 7]])
numpy.meshgrid()只能用于2D,现在可以ND。在这种情况下,3D:
In [115]:
%timeit np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)
10000 loops, best of 3: 74.1 µs per loop
In [116]:
np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)
Out[116]:
array([[1, 4, 6],
[1, 5, 6],
[2, 4, 6],
[2, 5, 6],
[3, 4, 6],
[3, 5, 6],
[1, 4, 7],
[1, 5, 7],
[2, 4, 7],
[2, 5, 7],
[3, 4, 7],
[3, 5, 7]])
请注意,最终结果的顺序略有不同。
我有一个问题,给你两个数组,比如: 这意味着第一个数组中有5个数字,第二个数组中有3个数字。第二行是第一个数组,第三行是第二个数组。这个程序的目标是将第二个数组中的数字插入第一个数组(可以分开),从而使组合数组的所有位置都是奇数(第一、第三、第五……)数字加起来就是可能的最大数字。上述问题的输出示例: 既然阵列变成了 我试图利用第一个数组中的差异,通过 并找到差异最大的地方在第二个数组中插入数字。
问题内容: 我在创建numpy数组的numpy数组时遇到问题。我将在一个循环中创建它: 所需结果: 实际结果: 可能吗?我不知道数组的最终尺寸,因此无法使用固定尺寸对其进行初始化。 问题答案: 永远不要在循环中追加数组:与基本的Python相比,这是NumPy非常不擅长的一项操作。这是因为您要对每个数据进行完整复制,这将花费您二次时间。 相反,只需将您的数组附加到Python列表中,并在最后进行转
问题内容: 我有一个像这样的数组: 我试图得到这样的数组: 每行(具有固定的任意宽度)都移动一个。A的数组是10k记录长,我试图在Numpy中找到一种有效的方法。目前,我正在使用vstack和for循环,这很慢。有没有更快的方法? 编辑: 问题答案: 实际上,有一种更有效的方法来执行此操作…使用etc的缺点是,您正在复制数组。 顺便说一句,这实际上与@Paul的答案相同,但我将其发布只是为了更详细
我有两个数组:
我如何从"CSV示例"创建一个像"最终结果"这样的数组? 背景 我正在构建一个用于测试的实验室文件系统,我想创建一个看起来有点像真实文件系统的文件夹结构。我有几个包含文件夹信息的CSV文件。 我想采用上面的每个组合,创建一个包含以下所有文件夹的文件系统。 一旦我有了上面所有完整路径的数组,就像做一样简单: 问题 我希望能够为任何CSV文件做到这一点,不管我有多少列,头名称是什么,或者每列有多少值。
寻找一种优雅的方式以特殊的方式合并两个散列数组: 如果名称关键字匹配,则结果必须包含< code>new_data的所有名称散列,仅包含< code>old_data的额外数据。 我的第一次尝试是这样的,但是它创建了一个额外的散列: