我正在尝试对二维函数进行插值,并且通过scipy.interpolate.interp2d遇到了我认为怪异的行为。我不明白问题是什么,我很乐意提供帮助或提示。
import numpy as np
from scipy.interpolate import interp2d
x = np.arange(10)
y = np.arange(20)
xx, yy = np.meshgrid(x, y, indexing = 'ij')
val = xx + yy
f = interp2d(xx, yy, val, kind = 'linear')
Run Code Online (Sandbox Code Playgroud)
运行此代码时,出现以下警告:
scipy / interpolate / fitpack.py:981:RuntimeWarning:由于B样条系数的数量已经超过数据点m的数量,因此无法添加更多的结。可能的原因:s或m太小。(fp> s)kx,ky = 1,1 nx,ny = 18,15 m = 200 fp = 0.000000 s = 0.000000
warnings.warn(RuntimeWarning(_iermess2 [ierm] [0] + _mess))
我不明白为什么interp2d告诉我它应该进行线性插值,为什么会使用任何样条曲线。当我继续并在网格上评估f时,一切都很好:
>>> f(1,1)
array([ 2.])
Run Code Online (Sandbox Code Playgroud)
当我脱离网格对其进行评估时,即使该函数显然是线性的,也会出现很大的错误。
>>> f(1.1,1)
array([ 2.44361975])
Run Code Online (Sandbox Code Playgroud)
我有点困惑,我不确定是什么问题。有人遇到过类似的问题吗?我以前使用过matlab,这几乎是我在那做1:1的方式,但是也许我做错了。
当我使用矩形网格(即y = np.arange(10))时,一切都可以正常工作,但这不是我所需要的。当我使用三次插值而不是线性插值时,误差变小(由于函数是线性的,所以也没有太大意义),但误差仍然很大。
我有一个很大的 mongoDB 集合。我想将此集合导出为 CSV,以便我可以将其导入到统计包中以进行数据分析。
该集合中有大约 15 GB 的文档。我想将集合拆分为约 100 个大小相同的 CSV 文件。有没有办法使用 mongoexport 实现这一目标?我还可以在 pymongo 中查询整个集合,将其拆分并手动写入 csv 文件,但我想这会更慢并且需要更多的编码。
感谢您的意见。