优化 numpy 脚本以在特定格式和顺序的点之间创建链接

问题描述 投票:0回答:1

从如下情况开始(见图):

starting situation

因此,首先,我们在 x 轴上有一系列点(点之间的距离可以变化,点的数量也可以变化。在示例中,我们有 5 个起点)。我们分几个步骤(在示例中为 3 个步骤)沿 y 执行平移,以获得最终的 y 值(在本例中为 3 个单位)。黄色数字对应于它们的索引。

我的目标是实现以下目标:

final situation

换句话说,在翻译后的点之间创建链接。 在实践中,为了简单起见,我想获得这样的最终数组:

final : 
 [[ 0  6] [ 6 12] [12 18]
 [ 1  7] [ 7 13] [13 19]
 [ 2  8] [ 8 14] [14 20]
 [ 3  9] [ 9 15] [15 21]
 [ 4 10] [10 16] [16 22]
 [ 5 11] [11 17] [17 23]]

这是我制作的完成这项工作的脚本:


import numpy as np
# u: number of points along the x axis
u = 6
# v: number of points along the y axis
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的脚本...
  • 特别是,是否可以不使用循环来完成?

非常感谢。

python numpy optimization
1个回答
0
投票

这应该有效:

matrix = np.arange(u*v).reshape((v,u))
np.array(np.stack((matrix, np.roll(matrix, v-1, axis = 0)), axis=-1))[:-1]

输出:

array([[[ 0,  6],
        [ 1,  7],
        [ 2,  8],
        [ 3,  9],
        [ 4, 10],
        [ 5, 11]],

       [[ 6, 12],
        [ 7, 13],
        [ 8, 14],
        [ 9, 15],
        [10, 16],
        [11, 17]],

       [[12, 18],
        [13, 19],
        [14, 20],
        [15, 21],
        [16, 22],
        [17, 23]]])
© www.soinside.com 2019 - 2024. All rights reserved.