如何在Python中合并两个相邻矩形的网格点?
解决两个矩形网格点合并的问题
嘿,我明白你遇到的麻烦了!用+号去合并两个网格点数组肯定会报错,因为+是元素级别的加法运算,它要求两个数组的形状完全一致才能对应位置相加,但你的两个矩形网格点数量不一样(行数不同),numpy的广播机制没法处理这种情况,所以才会抛出ValueError。
正确的做法是用数组拼接函数,把两个网格点数组按行合并(因为每个网格点是一行二维坐标),下面是具体的实现步骤:
1. 分别生成两个矩形的网格点
先确保你已经正确生成了绿色和蓝色矩形的网格点数组(比如分别命名为theGridPoints_green和theGridPoints_blue):
import numpy as np # 绿色矩形网格点(你的原代码) xvalues_green = np.array([0, 2, 4, 6, 8, 10]) yvalues_green = np.array([6, 8, 10, 12]) x_green, y_green = np.meshgrid(xvalues_green, yvalues_green) positions_green = np.vstack([x_green.ravel(), y_green.ravel()]) theGridPoints_green = positions_green.T # 蓝色矩形网格点(示例,根据你的实际坐标调整) xvalues_blue = np.array([0, 2, 4, 6, 8, 10]) yvalues_blue = np.array([0, 2, 4, 6]) x_blue, y_blue = np.meshgrid(xvalues_blue, yvalues_blue) positions_blue = np.vstack([x_blue.ravel(), y_blue.ravel()]) theGridPoints_blue = positions_blue.T
2. 拼接两个网格点数组
用np.concatenate或者np.vstack来完成合并,这两个函数都能把多个数组按指定轴拼接:
# 方法1:用concatenate,指定axis=0按行拼接 combined_grid = np.concatenate([theGridPoints_green, theGridPoints_blue], axis=0) # 方法2:用vstack(等价于axis=0的concatenate) combined_grid = np.vstack([theGridPoints_green, theGridPoints_blue])
3. 可选:去除重复点
如果两个矩形相邻的边界上有重复的网格点(比如绿色矩形的y=6和蓝色矩形的y=6是同一条边),可以用np.unique去重:
# 按行去重,keep='first'保留第一次出现的点 combined_grid_unique = np.unique(combined_grid, axis=0, keep='first')
这样就能得到包含两个矩形所有网格点的数组啦!
内容的提问来源于stack exchange,提问作者santobedi
相关产品推荐
相关产品推荐

