如何在numpy数组

时间:2016-03-25 06:48:52

标签: python numpy

我是numpy的新用户,我正在使用numpy delete,其中提到删除水平行我们应该使用axis = 0但是在numpy glossary的其他文档中,它表示水平轴是1.如果有人能让我知道我的理解有什么不对,那就太好了。

2 个答案:

答案 0 :(得分:6)

数组是在任何维度的网格中构造数字的系统方法。网格方向具有标签,这些标签来自于如何将新尺寸添加到网格中的约定。

以下是惯例:

最简单的这种网格是一个0维(0D)数组,它具有 no axes 并且只能保存标量。这是一个0D数组:

42

如果我们开始将标量放入列表中,我们会得到一维数组。这个新网格只有一个轴,如果我们想用一个数字标记该轴,我们最好从简单的东西开始 - 比如 axis=0 !一维数组可以是:

# ----0--->
 [42, π, √2]

现在我们要创建一个1D数组的数组,它将为我们提供一个2D数组。水平轴仍然为0,但新的垂直轴将获得我们知道的下一个最低数字 axis=1 。这是它的样子:

# ----0---->
[[42, π,  √2],  # |
 [1,  2,   3],  # 1
 [10, 20, 30]]  # V

真正的美丽在于它无穷无尽。如果我们需要一个数字框,我们将通过堆叠2D数组创建一个3D数组,跟踪框深度的方向自然必须是 axis=2 。如果我们想要一个4D阵列,我们只需要制作一个盒子列表(3D阵列),然后使用 axis=3 上的索引调用每个盒子。这可以永远持续下去。

在NumPy中:

任何采用axis - 参数的函数/方法都使用此约定。对于2D数组,这意味着执行类似np.delete(X, [1, 2, 3], axis=0)的操作将迭代沿第0轴挤出的数组,返回X而不使用第1,2和3行。同样的逻辑适用于从中获取值数组。

X[rows_along_0th_axis, columns_along_1st_axis, ..., vectors_along_nth_axis]

答案 1 :(得分:5)

从您提供的链接中获取numpy deleteglossary的摘录,这些摘录可能会引起您的一些混淆和以下的澄清。

  1. 摘录
  2. >>> arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
    >>> arr
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])
    >>> np.delete(arr, 1, 0)
    array([[ 1,  2,  3,  4],
           [ 9, 10, 11, 12]])
    
    1. 摘录
    2.   

      第一个跨行(轴0)垂直向下运行,并且   第二个水平跨列(轴1)

      我认为混淆来自第二个摘录中的垂直水平。 第二个摘录的含义是,通过设置axis,可以决定移动哪个维度。例如,在2d矩阵中,axis=0对应于遍历行(因此在数组上垂直移动),而axis=1对应 迭代列(因此在数组上水平移动)。它没有说axis=1对应于OP所理解的横轴。

      delete函数遵循上面的描述,实际上,通过使用np.delete(arr, 1, axis=0),函数遍历行,并删除索引为1的行。相反,如果要删除列,然后axis=1。例如,在同一个数组arr

      >>> np.delete(arr, [0,1,4], axis=1)
      array([[ 3,  4],
             [ 7,  8],
             [11, 12]])
      

      其中delete遍历列,并删除索引为0,1的列,并且没有其他内容被删除,因为索引为4的列不存在。