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

优化Numpy脚本:按特定格式与顺序创建点间连接

无循环实现点连接数组生成

需求说明

x轴上分布u个点,沿y轴平移得到v层点集,点索引按行优先排列(示例中v=4、u=6时,第一层为0-5,第二层6-11,依此类推)。目标是生成纵向相邻点的连接数组,即每个x位置上,将y方向相邻的点两两配对。

原循环实现代码

import numpy as np
# u: x轴上的点数量
u = 6
# v: y轴上的层级数量
v = 4

def x_links(u,v):
    matrice = np.arange(u*v).reshape((v, u))
    links =np.array([])
    for i in range(u):
        a = np.repeat(matrice[:,i],2)[1:-1] 
        links=np.append(links,a).astype(int)
    return links.reshape(int(len(links)/2),2)
    
example = x_links(u,v)
print("final : \n",example)

无循环的Pythonic优化实现

利用Numpy的广播与向量化操作完全替代循环,代码更简洁高效:

import numpy as np

u = 6  # x轴点数量
v = 4  # y轴层级数量

def x_links(u, v):
    # 生成每个x列的所有y层点索引:形状为(u, v),每行对应一个x列的点序列
    column_points = np.arange(u)[:, None] + np.arange(v) * u
    # 对每个列生成相邻点对:前v-1个点与后v-1个点配对
    adjacent_pairs = np.stack([column_points[:, :-1], column_points[:, 1:]], axis=-1)
    # 展平为目标格式的二维数组
    return adjacent_pairs.reshape(-1, 2)

example = x_links(u, v)
print("最终结果:\n", example)

优化思路说明

  • 广播生成列点序列:通过np.arange(u)[:, None]将x轴索引转为列向量,与np.arange(v)*u(y层偏移)相加,一次性生成所有x列的y层点索引,无需循环遍历每一列。
  • 向量化生成相邻对:对每个列的点序列,直接取[:, :-1](除最后一个点)和[:, 1:](除第一个点),堆叠后得到所有相邻点对,避免了repeat和append的低效操作。
  • 高效展平:用reshape(-1, 2)自动计算行数,快速将多维数组转为目标格式。

优势对比

  • 完全消除显式循环,符合Pythonic的向量化编程风格。
  • 避免了原代码中多次np.append导致的内存重新分配,在u、v较大时性能提升显著。
  • 代码逻辑更直观,可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:15:06