0

Numpy奇技淫巧——理解axis

Numpy是整个Python的科学计算的基础,撑起了Python作为机器学习重要语言的整个计算基础,包括Numpy, Scipy, Pandas, Scikit-Learn以及最近兴起的机器学习和深度学习库,包括TensorFlow, Keras等,它们多维数据的表示和使用无不基于Numpy,因此在语法和使用上以及功能上都和Numpy有着很多相似之处,这篇文章介绍Numpy中的非常重要的概念,那就是axis,如果你完全理解了axis,那么操作起多维的数组的时候将得心应手。

Numpy的主要对象是同质多维数组,在Numpy中,维度(dimensions)被称作轴(axes),轴(axes)的值就是秩(rank, 要区别与线性代数的矩阵的秩),比如数组[1, 2, 1]的维度就是1,它有1个轴,它的秩是1,而轴的长度是3。下面的例子当中,

data的维度是2,秩的值也是2,其中第一个维度(轴)的长度是2,第二个维度(轴)的长度是3。再比如

data2的维度是4,如下代码所示,其中,第一个维度的长度是2,第二个维度的长度是3,第三个维度的长度是2,第四个维度的长度是2。

Numpy数组的名字叫ndarray,它的主要的属性如下
文档原文为:

  • ndarray.ndim
    the number of axes (dimensions) of the array. In the Python world, the number of dimensions is referred to as rank.
  • ndarray.shape
    the dimensions of the array. This is a tuple of integers indicating the size of the array in each dimension. For a matrix with n rows and m columns, shape will be (n,m). The length of the shape tuple is therefore the rank, or number of dimensions, ndim.
  • ndarray.size
    the total number of elements of the array. This is equal to the product of the elements of shape.
  • ndarray.dtype
    an object describing the type of the elements in the array. One can create or specify dtype’s using standard Python types. Additionally NumPy provides types of its own. numpy.int32, numpy.int16, and numpy.float64 are some examples.
  • ndarray.itemsize
    the size in bytes of each element of the array. For example, an array of elements of type float64 has itemsize 8 (=64/8), while one of type complex32has itemsize 4 (=32/8). It is equivalent to ndarray.dtype.itemsize.
  • ndarray.data
    the buffer containing the actual elements of the array. Normally, we won’t need to use this attribute because we will access the elements in an array using indexing facilities.

给个求和的例子

上面的代码表示按照第一个维度求和,也即axis=0,就是按照axis=0这个方向求和,那么得到的结果是axis=0这个轴消失,最后的shape(3, )。再看这个例子

axis=1这个方向求和,那么axis=1这个轴消失,最后得到的结果的shape(4,)。可以总结为一句话:设axis=i,则numpy沿着第i个下标变化的方向进行操作。

再举一个例子,numpy的求和操作sum

data2有四个aixs,这里分别对axis=0,1,2,3进行求和操作

可以看到axis=0这一轴消失了,再看其他的结果

这里我的理解是当一个轴消除时,为了保持其他的轴不变,那么所做的操作必须迁就下一个轴,与前前面的轴无关。

参考资料

goingmyway

我是一只野生程序猿,我关注机器学习,神经网络,深度学习,增强学习,人工智能,Python,C/C++,Linux

发表评论

电子邮件地址不会被公开。 必填项已用*标注