如何用Python的meshgrid获取不规则轴划分的4D超立方体坐标?
4D不规则网格超立方体坐标生成实现
核心思路
针对各轴不规则划分的4D网格,每个超立方体由各轴上的一段相邻区间组合而成,每个超立方体包含2^4=16个顶点——顶点坐标是各轴区间左右端点的所有组合。
Python代码实现
import numpy as np from itertools import product # 定义各轴的不规则划分点 x = [0, 1, 2, 3, 5] y = [0, 1, 2, 3] z = [0, 1, 2, 3, 4] w = [0, 1, 2, 3, 5, 6] # 1. 生成各轴的相邻区间(左端点,右端点) x_intervals = list(zip(x[:-1], x[1:])) y_intervals = list(zip(y[:-1], y[1:])) z_intervals = list(zip(z[:-1], z[1:])) w_intervals = list(zip(w[:-1], w[1:])) # 2. 获取所有4D超立方体的区间组合(每个元素对应一个超立方体的各轴区间) all_hypercube_intervals = list(product(x_intervals, y_intervals, z_intervals, w_intervals)) # 3. 生成每个超立方体的所有顶点坐标 all_hypercube_vertices = [] for hc_intervals in all_hypercube_intervals: # 对每个轴的两个端点做笛卡尔积,得到16个顶点 vertices = list(product(*hc_intervals)) # 转换为numpy数组方便后续数值计算 vertices_np = np.array(vertices) all_hypercube_vertices.append(vertices_np) # 示例:输出第一个超立方体的顶点坐标 print("第一个4D超立方体的16个顶点:") print(all_hypercube_vertices[0]) # 输出超立方体总数 print(f"\n生成的4D超立方体总数:{len(all_hypercube_vertices)}")
代码说明
- 各轴区间生成:通过
zip(x[:-1], x[1:])获取相邻点对,得到每个轴上的所有连续区间。 - 超立方体区间组合:用
itertools.product将四个轴的区间做笛卡尔积,得到所有可能的超立方体区间组合,总数为各轴区间数的乘积(示例中为4×3×4×5=240个)。 - 顶点生成:对每个超立方体的各轴区间端点做笛卡尔积,得到该超立方体的全部16个顶点,转换为numpy数组便于后续数值处理。
内容的提问来源于stack exchange,提问作者Antonio Gracia
相关产品推荐
相关产品推荐

