代码之家  ›  专栏  ›  技术社区  ›  Startec

理解numpy中的切片语法?

  •  0
  • Startec  · 技术社区  · 7 年前

    我有一个x维矩阵。对于这个例子,我将使用2x2数组。

    np.array([[2, 2], [3,3]])
    

    如何交替添加某个值的行和列,使结果看起来像:

    array([[2, x, 3, x],
           [x, x, x, x].
           [2, x, 3, x],
           [x, x, x, x]])
    

    This answer 通过说在正确大小的目标矩阵中设置行,给出了一个有用的开头 b 从矩阵 a 像这样 a[::2] = b 但是什么是 ::2 在切片语法中,如何使它在列上工作?

    简言之,什么是 x y z 参数如下: a[x:y:z] ?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tacratis    7 年前

    如果我正确理解您的需求,这应该是有效的:

    import numpy as np
    a = np.array([[2,2],[3,3]])
    b = np.zeros((len(a)*2,len(a)*2))
    b[::2,::2]=a
    

    这将“插入”数组中的值(此处称为 a )每2行和每2列

    编辑: 根据你最近的编辑,我希望这一增加将有助于:

    x:y:z 意味着你从元素开始 x 一直走到 y (不包括) Y 本身)使用 z 作为一个跨步(例如 2 每2个元素,所以 X , x+2 , x+4 等到 x+2n 那是最接近的 Y 可能的) 所以 ::z 意味着所有的元素都有步伐 Z (或) ::2 每2个元素,从 0 )

    对数组的每个“维”都这样做,所以对于2d [::z1,::z2] 浏览你的全部数据 z1 在行上 z2 在柱子上。

    如果仍不清楚,请在评论中说明不清楚的内容。

    最后一个说明-仅当您键入 : 你含蓄地告诉python 0:len(array) 同样适用于 ::Z 这意味着 0:len(array):z . 如果你只是打字 :: 这似乎意味着 : (尽管我没有深入研究这个具体的例子)