Python如何导出规则网格指定点并重排numpy存储的坐标点数组
实现代码
import numpy as np # 示例输入数据 sp_arr=[np.array([[1., 8.]]), np.array([[2., 8.], [2., 9.]]), \ np.array([[3., 8.], [3., 9.], [3., 10.]]),\ np.array([[4., 8.], [4., 9.], [4., 10.]]),\ np.array([[5., 9.], [5., 10.]]), np.array([[6., 9.], [6., 10.]]),\ np.array([[7., 10.]]), np.array([[8., 10.]])] surfs = [] # 过滤长度不足2的无效数组(长度为1的数组无参与矩形计算) valid_arr = [arr for arr in sp_arr if len(arr) >= 2] arr_lens = [len(arr) for arr in valid_arr] # 生成第一个矩形 for i in range(len(valid_arr)-1): l_cur, l_next = arr_lens[i], arr_lens[i+1] if l_next > l_cur: short_arr = valid_arr[i] long_arr = valid_arr[i+1] mean_short = np.mean(short_arr[:, 1]) mean_long = np.mean(long_arr[:, 1]) take_part = long_arr[:l_cur] if mean_long > mean_short else long_arr[-l_cur:] surfs.append(np.concatenate([short_arr, take_part], axis=0)) break # 生成第二个矩形 max_len = max(arr_lens) max_len_arrs = [arr for arr in valid_arr if len(arr) == max_len] surfs.append(np.concatenate(max_len_arrs, axis=0)) # 生成第三个矩形 for i in range(len(valid_arr)-1): l_cur, l_next = arr_lens[i], arr_lens[i+1] if l_next < l_cur: long_arr = valid_arr[i] short_len = l_next # 收集所有连续长度等于短数组长度的数组 short_arrs = [] for j in range(i+1, len(valid_arr)): if len(valid_arr[j]) == short_len: short_arrs.append(valid_arr[j]) else: break mean_short = np.mean(np.concatenate(short_arrs)[:, 1]) mean_long = np.mean(long_arr[:, 1]) take_part = long_arr[-short_len:] if mean_short > mean_long else long_arr[:short_len] surfs.append(np.concatenate([take_part] + short_arrs, axis=0)) break # 输出验证 for idx, surf in enumerate(surfs, 1): print(f"第{idx}个矩形坐标:\n{surf}\n")
输出结果
运行后得到的surfs和预期输出完全一致:
第1个矩形坐标: [[2. 8.] [2. 9.] [3. 8.] [3. 9.]] 第2个矩形坐标: [[ 3. 8.] [ 3. 9.] [ 3. 10.] [ 4. 8.] [ 4. 9.] [ 4. 10.]] 第3个矩形坐标: [[ 4. 9.] [ 4. 10.] [ 5. 9.] [ 5. 10.] [ 6. 9.] [ 6. 10.]]
内容的提问来源于stack exchange,提问作者Link_tester
相关产品推荐
相关产品推荐

