如何在numpy数组中选择轴值

use*_*744 3 python numpy

我是numpy的新用户,我正在使用numpy delete,其中提到要删除水平行我们应该使用axis = 0但是在numpy 词汇表的其他文档中,它表示水平轴是1.如果有人可以,那将是很好的让我知道我的理解有什么问题.

Ulf*_*lak 6

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

这是惯例:

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

42
Run Code Online (Sandbox Code Playgroud)

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

# ----0--->
 [42, ?, ?2]
Run Code Online (Sandbox Code Playgroud)

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

# ----0---->
[[42, ?,  ?2],  # |
 [1,  2,   3],  # 1
 [10, 20, 30]]  # V
Run Code Online (Sandbox Code Playgroud)

真正的美是这种概括为无限.如果我们需要一个数字框,我们将通过堆叠2D数组创建一个3D数组,并且自然必须跟踪框的深度方向axis=2.如果我们想要一个4D阵列,我们只需要制作一个盒子列表(3D阵列),并使用索引来调用每个盒子axis=3.这可以永远持续下去.

在NumPy中:

采用axis-argument的任何函数/方法都使用此约定.对于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]
Run Code Online (Sandbox Code Playgroud)


alb*_*oql 5

从你提供的链接中,这里有numpy deleteglossary的摘录,可能会引起你的一些困惑和下面的澄清.

  1. 摘抄
>>> 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]])
Run Code Online (Sandbox Code Playgroud)

  1. 摘抄

第一个垂直向下跨越行(轴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]])
Run Code Online (Sandbox Code Playgroud)

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