【问题标题】:Reshaping and Stacking Arrays重塑和堆叠阵列
【发布时间】:2015-07-28 22:02:28
【问题描述】:

我继承了一大段代码,作为一个新手并没有掌握它的复杂性。它正在格式化生成的 2x1 数组,作为 matplotlib.LineCollect 的线段传递

                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 成为“数组中的数组中的数组”?

    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'> 

这是怎么回事…… 对这些函数、格式和数据类型的任何启示都会很棒

【问题讨论】:

    标签: python arrays numpy indexing formatting


    【解决方案1】:

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

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

    对于下一部分,您对索引感到困惑,这里有关于索引的优秀文档:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html 但要了解它的要点,python将-1解释为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 行的顶部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 2018-07-18
      • 2018-02-21
      • 2021-08-31
      相关资源
      最近更新 更多