You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将含x、y、z、v列的Pandas DataFrame转换为NumPy 3D网格

将规则间隔的Pandas DataFrame转换为NumPy 3D网格

核心思路

由于你的DataFrame中x、y、z坐标是**规则间隔(步长为1)**的长方体网格,我们可以通过排序、提取维度信息、重塑数组的方式快速得到可用于Numba加速的3D数组。

步骤与代码实现

1. 导入依赖库

import pandas as pd
import numpy as np
from numba import njit

2. 确保数据顺序正确

先按x、y、z升序排序,保证坐标点的连续性,避免reshape时出现错位:

# 按x→y→z的顺序排序数据
df_sorted = df.sort_values(by=['x', 'y', 'z'])

3. 提取网格维度信息

获取x、y、z的唯一取值,并计算各维度的尺寸:

# 获取各轴的唯一坐标值
x_vals = df_sorted['x'].unique()
y_vals = df_sorted['y'].unique()
z_vals = df_sorted['z'].unique()

# 计算3D网格的各维度大小
nx, ny, nz = len(x_vals), len(y_vals), len(z_vals)

4. 验证数据完整性(可选)

检查总点数是否等于各维度乘积,确保没有缺失的坐标点:

assert len(df_sorted) == nx * ny * nz, "数据中存在缺失的网格点,请检查原始数据"

5. 转换为3D NumPy数组

将v列的值重塑为3D数组,维度顺序为(x, y, z):

# 重塑为3D数组
v_3d = df_sorted['v'].values.reshape(nx, ny, nz)

6. 生成对应网格坐标(可选)

如果需要可视化或坐标相关计算,用np.meshgrid生成匹配的3D坐标网格(注意使用indexing='ij'保证维度顺序一致):

# 生成与v_3d维度匹配的3D坐标网格
X, Y, Z = np.meshgrid(x_vals, y_vals, z_vals, indexing='ij')

用Numba加速处理示例

现在可以直接用njit装饰器加速你的块模型处理逻辑:

@njit
def process_block(v_grid):
    # 示例:计算内部点的6邻域平均值
    res = np.zeros_like(v_grid)
    nx, ny, nz = v_grid.shape
    for i in range(1, nx-1):
        for j in range(1, ny-1):
            for k in range(1, nz-1):
                res[i,j,k] = (v_grid[i-1,j,k] + v_grid[i+1,j,k] +
                             v_grid[i,j-1,k] + v_grid[i,j+1,k] +
                             v_grid[i,j,k-1] + v_grid[i,j,k+1]) / 6
    return res

# 调用加速函数
processed_v = process_block(v_3d)

内容的提问来源于stack exchange,提问作者Spon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:45:36