重塑和堆叠数组

时间:2015-07-28 22:02:28

标签: python arrays numpy indexing formatting

我继承了一大块代码,并且是一个新手,没有抓住它的错综复杂。它正在生成2x1数组生成,作为matplotlib.LineCollect的linesegments传递

                coar[t] = na[j] 
            coart = coar.reshape(-1,1,2)
            segments = np.hstack([coart[:-1],coart[1:]])

请更正我的术语: 它正在迭代1x2阵列na并将它们放入' coar' "数组数组"

   coar
    [[51 50]
     [52 50]
     [52 49]
     [52 48]] <type 'numpy.ndarray'>

reshape(-1,1,2)中的参数如何将coar变成数组内数组中的#34;数组&#34;?

    coart:
    [[[51 50]]

     [[52 50]]

     [[52 49]]

     [[52 48]]] <type 'numpy.ndarray'>   

最后,hstack将成对的点绘制为LineCollect的线段。它似乎采用带有[:-1]的-1列?负列索引?我不明白这一切是如何运作的

    [[[51 50]
      [52 50]]

     [[52 50]
      [52 49]]

     [[52 49]
      [52 48]]] <type 'numpy.ndarray'> 

发生了什么...... 对这些功能,格式和数据类型的任何启示都会很棒

1 个答案:

答案 0 :(得分:0)

由于你是初学者,因此指出python具有出色的文档可能会有所帮助。首先,可以在此处找到np.reshape文档: http://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html 但是要告诉你完整的故事: 在重塑函数的情况下,-1表示numpy按该维度的长度推断该维度。 因此,在这种情况下,如果您在重塑后检查coart的形状,您会发现:

    coart.shape
    #output: (4,1,2)

对于下一部分,您对索引感到困惑,并且有关于索引的优秀文档:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html 但为了得到它的要点,一个-1被python解释为n + i,其中n是数组的长度,i是负数。所以在你的情况下-1真的意味着3.此外,由于python使用基于0的索引,因此它们不计算最后一个数字:

     coart[:-1]
     #output [[[51,50],[52,50],[52,49]]]

在你的情况下意味着将数组从元素0带到2(因为最终的数字,不包括3)

    coart[1:] 

表示从元素1开始到结尾(所以不要包含元素0)。

因此,您可以看到水平堆叠告诉它将第0行放在行1的顶部,第1行放在第2行的顶部,第2行放在第3行的顶部。