【发布时间】:2017-01-12 21:51:18
【问题描述】:
假设我有依赖于 4 个变量的数据:a、b、c 和 d。我希望插值返回一个二维数组,该数组对应于 a 和 b 的单个值,以及 c 和 d 的值数组。但是,数组大小不必相同。具体来说,我的数据来自晶体管模拟。电流取决于此处的 4 个变量。我想绘制一个参数变化。参数上的点数比横轴的点数少很多。
import numpy as np
from scipy.interpolate import interpn
arr = np.random.random((4,4,4,4))
x1 = np.array([0, 1, 2, 3])
x2 = np.array([0, 10, 20, 30])
x3 = np.array([0, 10, 20, 30])
x4 = np.array([0, .1, .2, .30])
points = (x1, x2, x3, x4)
以下作品:
xi = (0.1, 9, np.transpose(np.linspace(0, 30, 4)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
这也是如此:
xi = (0.1, 9, 24, np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
但不是这个:
xi = (0.1, 9, np.transpose(np.linspace(0, 30, 3)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
如您所见,在最后一种情况下,xi 中最后两个数组的大小是不同的。 scipy 不支持这种功能还是我错误地使用了interpn?我需要创建一个绘图,其中xi 之一是参数,而另一个是水平轴。
【问题讨论】:
-
看起来您没有正确使用
interpn...我假设points代表您的网格,即值的四个维度中的每个维度中的“采样点”你知道。arr持有这些已知值。但是使它们随机化意味着很难检查插值是否有效。试着让它们都相等,或者更好的是,在四个维度中的每一个维度上都是线性的。xi应该是您想知道arr值的点的坐标。xi应该是一个包含 k 行、k 个点和 4 列(4D 数据)的数组。 -
谢谢普拉文!然而,我的问题如下。假设我有依赖于 4 个变量的数据:a、b、c、d。我希望插值返回一个二维数组,该数组对应于 a 和 b 的单个值,以及 c 和 d 的值数组。但是,数组大小不必相同。具体来说,我的数据来自晶体管模拟。电流取决于此处的 4 个变量。我想绘制一个参数变化。参数上的点数比横轴的点数要少很多。
-
下次直接编辑你的问题,而不是在评论中添加大量信息
-
顺便提一下,
np.transpose(np.linspace(0, 30, 3))不会将它变成列向量。阅读 numpy 中的一维数组。您需要引入一个新维度,因此请改用np.linspace(0, 30, 3)[:, np.newaxis]。但在这种情况下,您不需要这个,正如我在回答中所展示的那样。 -
呃,转置是个错误。我在乱搞代码,看看什么会起作用,它悄悄地出现在了这篇文章中。很抱歉!
标签: python python-2.7 numpy scipy