根据文档scipy.ndimage.map_coordinates
、
坐标数组用于为输出中的每个点查找输入中的相应坐标。这些坐标处的输入值由所需阶数的样条插值确定。
输出的形状是通过放置第一个轴从坐标数组的形状派生出来的。沿着第一个轴的数组值是输入数组中找到输出值的坐标。
我有一个在三维网格上定义的离散三维函数 (t,x,y);在该3D网格的每个点上,该函数具有唯一的值,除非其值为零。
我有另一组Pandas Dataframe 形式的数组,有三列,t_new、x_new 和 y_new。
我想使用scipy.ndimage.map_coordinates
对函数进行插值,以便在所述 Dataframe 中呈现的新数据集上计算其值。
由于我收到以下错误消息,因此我确定我没有正确设置map_coordinates:
File "D:\Users\username\Anaconda3\lib\site-packages\scipy\ndimage\interpolation.py", line 437, in map_coordinates
raise RuntimeError('invalid shape for coordinate array')
下面是我对插值函数的定义:
from scipy.ndimage import map_coordinates
def interpolator_3d(df, func_values):
# The coordinates at which input is evaluated
coordinates = df[['t_new', 'x_new', 'y_new']].values.T # (3, 1273)
# list of input array [[t0, x0, y0, value0], [t1, x1, y1, value1], ...]
input_arr = func_values # (1780020000, 4)
return map_coordinates(input_arr, coordinates)
1条答案
按热度按时间guicsvcw1#
使用
map_coordinates
至少有两个问题。请记住,此函数是为图像重采样而设计的。1.如果你有一个三维函数,数组
input_arr
应该是三维的。map_coordinates
将使用索引作为t
,x
和y
坐标。函数的值v
必须存储在每个相应的位置。如果你的原始函数有另一个基本网格,那么你必须根据前后的数组索引来规范化所有的东西。2这需要一个等距的网格作为输入。coordinates
必须是例如[[t_new_0, t_new_1, ...], [x_new_0, x_new_1 ...], [y_new_0, y_new_1, ...]]
形式的阵列。结果将是内插样本[[v_new_0, v_new_1, ...]]
的列表。通常,如果input_array
是n
维的,coordinates
必须是包含n
数组的列表,这些数组具有相同的形状S
。结果将是形状为S
的数组的列表。n
=3个维度和5个采样以在1维形状中插值的示例:输出量:
更新日期:
这意味着,如果
input_array
的形式为[[t0, x0, y0, value0], [t1, x1, y1, value1], ...]
,长度为1780020000 = 19778 * 500 * 180
,则必须相应地将其转换为(19778, 500, 180)
形式的数组: