NumPy中的维度Axis详解
浅谈NumPy中的维度Axis
NumPy中的维度是一个很重要的概念,很多函数的参数都需要给定维度Axis,如何直观的理解维度呢?我们首先以二维数组为例进行说明,然后推广到多维数组。
(有人将ndim属性叫维度,将axis叫轴,我还是习惯将axis称之为维度,axis=0称为第一个维度)
二维数组的列子
下面是一个二维数组的列子:
In[1]:importnumpyasnp In[2]:x=np.random.randint(0,9,(2,3)) In[3]:x Out[3]: array([[0,8,6], [1,2,1]]) In[4]:x.ndim Out[4]:2 In[5]:x.shape Out[5]:(2,3) In[6]:x[0] Out[6]:array([0,8,6]) In[7]:x[:,0] Out[7]:array([0,1]) In[8]:x.sum(axis=0) Out[8]:array([1,10,7]) In[9]:x.sum(axis=1) Out[9]:array([14,4]) In[10]:x[0]+x[1] Out[10]:array([1,10,7]) In[11]:x[:,0]+x[:,1]+x[:,2] Out[11]:array([14,4])
看上面这个例子,x是一个2行3列的数组,所以x是一个二维数组。
从第6和第7个输入输出,我们可以肯定地说"对于二维数组,第一维指的是行,第二维指的是列"。
我们通过sum求和函数,探究一下x的第一维和第二维的意义?从第8个和第9个输入输出,我们可以看到对于参数axis=0,其结果是数组列的和;而对于参数axis=1,其参数是数组行的和。
对于axis=0第一个维度求和,不是将第一维度(行)中的所有元素相加,而是沿着第一个维度,将对应其他维度(列)的数据相加,分解开来就是第10个输入输出。同理,对于axis=1,是沿着列,将行中的元素相加。
NumPy中对于维度的操作都是以类似这样的逻辑操作的。
多维数组
对于多维数组我们如何准确区分维度呢?下面以图示进行说明:
所以,我的结论就是:在概念上维度是从整体到局部看的,最外围的是第一个维度,然后依次往里,最内部的就是最后一维。
下面我们用代码验证一下上面的结论:
In[19]:x=np.random.randint(0,9,(2,3,4)) In[20]:x Out[20]: array([[[0,7,5,5], [6,3,1,3], [7,5,3,4]], [[8,1,4,6], [8,1,4,8], [3,0,8,2]]]) In[21]:x[0] Out[21]: array([[0,7,5,5], [6,3,1,3], [7,5,3,4]]) In[22]:x[:,0,:] Out[22]: array([[0,7,5,5], [8,1,4,6]])
可以看到,第21个输入输出取到的是第一维的第一个元素,第22个输入输出取到的是第二维的第一个元素。大家可以细细体味一下!
以上这篇(标题)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。