在 python 中将 1D 数组插入 3D 数组网格
interpolating 1D array into 3D array grid in python
我有一个包含 81 个数字的一维数组,对应于每 2.5 米深度的 81 个温度,我需要将其插值到一个 3D 数组网格,该网格在 z 方向上有 100 个点,在 x 方向上有 6 个点,并且y 方向 599 点。我创建一维值的函数是:
zz = np.arange(-200,0.1,2.5)
def grid_function(x, ABath=-0.2, BBath=0.1, CBath=50.,DBath=10.):
"""This function creates a theoretical grid"""
from numpy import tanh, arange
ans = ABath * (tanh(BBath * (-x - CBath))) + DBath
return ans
temp = grid_function(zz)
下面是我的网格的横截面
我不知道我是否清楚我在问什么,但如果有人知道一种方法,我将非常感激。
此致,
您应该能够从现有的 temp
1D 数组构建 3D 数组,如下所示:
zz = np.arange(-200,0.1,2.5)
def grid_function(x, ABath=-0.2, BBath=0.1, CBath=50.,DBath=10.):
"""This function creates a theoretical grid"""
from numpy import tanh, arange
ans = ABath * (tanh(BBath * (-x - CBath))) + DBath
return ans
temp = grid_function(zz)
# Construct 1D 100-element array with z-coordinates
z_new = np.linspace(zz[0], zz[-1], 100)
# Interpolate 1D temperatures at new set of 100 z-coordinates
temp_1d_new = np.interp(z_new, zz, temp)
# Replicate 1D temperatures into two additional dimensions
temp_3d_new = np.tile(temp_1d_new, (6, 599, 1))
不过,您也可以采用更直接的方法,立即从具有所需 100 个元素的 z 坐标一维数组开始(即跳过插值步骤)。像这样:
def grid_function(x, ABath=-0.2, BBath=0.1, CBath=50.,DBath=10.):
"""This function creates a theoretical grid"""
from numpy import tanh, arange
ans = ABath * (tanh(BBath * (-x - CBath))) + DBath
return ans
# Create 1D arrays with x-coordinates, y-coordinates and z-coordinates
x = np.linspace(0., 100., 6)
y = np.linspace(0., 100., 599)
z = np.linspace(-200., 0., 100)
# Create 3D meshgrids for x-coordinates, y-coordinates and z-coordinates
(xx, yy, zz) = np.meshgrid(x, y, z)
# Calculate temperatures 3D array from z-coordinates 3D array
temp = grid_function(zz)
旁注
place import statements always at the top of your code file.
被认为是好的做法
我有一个包含 81 个数字的一维数组,对应于每 2.5 米深度的 81 个温度,我需要将其插值到一个 3D 数组网格,该网格在 z 方向上有 100 个点,在 x 方向上有 6 个点,并且y 方向 599 点。我创建一维值的函数是:
zz = np.arange(-200,0.1,2.5)
def grid_function(x, ABath=-0.2, BBath=0.1, CBath=50.,DBath=10.):
"""This function creates a theoretical grid"""
from numpy import tanh, arange
ans = ABath * (tanh(BBath * (-x - CBath))) + DBath
return ans
temp = grid_function(zz)
下面是我的网格的横截面
我不知道我是否清楚我在问什么,但如果有人知道一种方法,我将非常感激。
此致,
您应该能够从现有的 temp
1D 数组构建 3D 数组,如下所示:
zz = np.arange(-200,0.1,2.5)
def grid_function(x, ABath=-0.2, BBath=0.1, CBath=50.,DBath=10.):
"""This function creates a theoretical grid"""
from numpy import tanh, arange
ans = ABath * (tanh(BBath * (-x - CBath))) + DBath
return ans
temp = grid_function(zz)
# Construct 1D 100-element array with z-coordinates
z_new = np.linspace(zz[0], zz[-1], 100)
# Interpolate 1D temperatures at new set of 100 z-coordinates
temp_1d_new = np.interp(z_new, zz, temp)
# Replicate 1D temperatures into two additional dimensions
temp_3d_new = np.tile(temp_1d_new, (6, 599, 1))
不过,您也可以采用更直接的方法,立即从具有所需 100 个元素的 z 坐标一维数组开始(即跳过插值步骤)。像这样:
def grid_function(x, ABath=-0.2, BBath=0.1, CBath=50.,DBath=10.):
"""This function creates a theoretical grid"""
from numpy import tanh, arange
ans = ABath * (tanh(BBath * (-x - CBath))) + DBath
return ans
# Create 1D arrays with x-coordinates, y-coordinates and z-coordinates
x = np.linspace(0., 100., 6)
y = np.linspace(0., 100., 599)
z = np.linspace(-200., 0., 100)
# Create 3D meshgrids for x-coordinates, y-coordinates and z-coordinates
(xx, yy, zz) = np.meshgrid(x, y, z)
# Calculate temperatures 3D array from z-coordinates 3D array
temp = grid_function(zz)
旁注
place import statements always at the top of your code file.
被认为是好的做法