小编War*_*ick的帖子

按列对NumPy float数组进行排序

按照这个技巧来获取NumPy数组的唯一条目,我现在有一个双列数组,基本上是第一个元素在[0.9:0.02:1.1]范围内的对,第二个元素在[1.5:0.1:2.0]范围内].我们称之为A.目前,它完全未分类,即

In [111]: A
Out[111]: 
array([[ 1.1 ,  1.9 ],
       [ 1.06,  1.9 ],
       [ 1.08,  1.9 ],
       [ 1.08,  1.6 ],
       [ 0.9 ,  1.8 ],
       ...
       [ 1.04,  1.6 ],
       [ 0.96,  2.  ],
       [ 0.94,  2.  ],
       [ 0.98,  1.9 ]])
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,以便每行首先在第二列中增加,然后在第一列中增加.即

array([[ 0.9 ,  1.5 ],
       [ 0.9 ,  1.6 ],
       [ 0.9 ,  1.7 ],
       [ 0.9 ,  1.9 ],
       [ 0.9 ,  1.9 ],
       [ 0.9 ,  2.  ],
       [ …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

向量值多变量函数的插值

在Python中,我正在尝试构建一个在多维(5+)参数空间中插入向量值数据的例程.即我有一个函数,它接受许多输入变量并返回许多输出变量.目前,对向量的每个元素都有一个调用.数据在一个圆柱文件中,所以我用它检索它

import numpy
[x_data,y_data,f1_data,f2_data] = numpy.loadtxt('data',unpack=True)
Run Code Online (Sandbox Code Playgroud)

然后,我使用SciPy函数实例化各个插值器,如

from scipy import interpolate
f1 = interpolate.LinearNDInterpolator((x_data,y_data),f1_data)
f2 = interpolate.LinearNDInterpolator((x_data,y_data),f2_data)
...
Run Code Online (Sandbox Code Playgroud)

现在,当我做插值电话,我要插每个值f1,f2等等.尽管实际上它应该是可以实现的一个操作.而且我猜测制作一个插值应该比制作5个或更多更快.

有没有办法构建矢量(或数组)值插值器?

我尝试使用构造插值器

f = interpolate.LinearNDInterpolator((x_data,y_data),(f1_data,f2_data,...))
Run Code Online (Sandbox Code Playgroud)

但它返回错误

ValueError:不同数量的值和点

我也读过这个问题和答案,但它是关于标量的向量值函数,显然可以用它来处理interp1d.

python interpolation

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

scipy.interpolate.LinearNDInterpolator 在大型数据集上无限期挂起

我在 Python 中插入一些数据以在常规网格上重新网格化,以便我可以部分集成它。数据表示一个高维参数空间的函数(目前为 3,将扩展到至少 5),并返回一个多值函数的 observables(目前为 2,将扩展到 3,然后可能有几十个)。

scipy.interpolate.LinearNDInterpolator由于缺乏任何其他明显的选项(并且因为我理解griddata只是调用它),我正在执行插值。在较小的数据集(15,000 行列数据)上,它工作正常。在较大的集(60,000+)上,该命令似乎无限期地运行。top表示 iPython 正在使用 100% CPU 并且终端完全没有响应,包括C-c. 到目前为止,我已经将它放置了几个小时无济于事,最终我想通过几百万个条目。

我怀疑这个问题与这张票有关,但据说是在 SciPy 0.10.0 中修补的,我昨天升级到了。

我的问题基本上是如何对大型数据集执行多维插值?根据我的尝试,解决方案可能来自几个可能的地方,但我没有运气找到它们。(由于 scipy 的几个子域似乎已关闭,这对我的搜索没有帮助......)

  • 怎么了LinearNDInterpolator?或者,至少,我怎样才能找出问题所在并尝试绕过绞刑?
  • 有没有办法重新制定插值,以便LinearNDInterpolator有效?也许通过谨慎地将数据分块以重新划分数据?
  • 是否有其他更适合该问题的高维插值器?(我注意到 SciPy 的大多数替代方案都仅限于 <2D 参数空间。)
  • 是否有其他方法可以将多维数据放到常规用户定义的网格上?这就是我试图通过插值来做的...

interpolation scipy

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

SciPy中的截断多元正态?

我正在尝试自动化某个过程,该过程有时需要从截断的多元法线中提取样本。也就是说,它是一个正态多元正态分布(即高斯分布),但变量被约束为一个长方体。我给定的输入是完整多元正态的均值和协方差,但是我需要在框中输入样本。

到目前为止,我只是拒绝在盒子外面采样,并根据需要重新采样,但是我开始发现我的过程有时会给我(a)大协方差,并且(b)接近边缘。这两个事件共同影响了我的系统速度。

所以我想做的是首先正确地采样分布。谷歌搜索只会导致本次讨论truncnorm分布scipy.stats。前者没有定论,而后者似乎是针对一个变量的。是否有任何本地多元截断法线?它会比拒绝样品更好,还是我应该做些更聪明的事情?

我将开始研究自己的解决方案,即将未截断的高斯曲线旋转到主轴(使用SVD分解等),使用截断的高斯积对分布进行采样,然后将其旋转回去,并根据需要拒绝/重新采样。如果截断的采样效率更高,我认为这应该更快地采样所需的分布。

python scipy

4
推荐指数
2
解决办法
2437
查看次数

标签 统计

python ×3

interpolation ×2

scipy ×2

numpy ×1