一起学习,一起成长!
Numpy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多。
In[13]:arr=np.arange(10)
In[14]:arr
Out[14]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In[15]:arr[5]
Out[15]: 5
In[16]:arr[5:8]
Out[16]: array([5, 6, 7])
In[17]:arr[5:8]=12
In[18]:arr
Out[18]: array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
如上所示,当你将一个标量值赋值给一个切片时(如arr[5:8]=12),该值会自动传播到整个选取。跟列表最重要的区别在于,数组切片是原始数据的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上:
In[19]:arr_slice=arr[5:8]
In[20]:arr_slice[1]=12345
Out[21]:arr
Out[21]: array([0,1,2,3,4,12, 12345,12, 8,9])
In[22]:arr_slice[:]=64
In[22]:arr
Out[23]: array([ 0,1,2,3,4, 64, 64, 64,8,9])
由于Numpy的设计目的是处理大数据,假如Numpy坚持要将数据复制来复制去的话会产生何等的性能和内存问题。
警告:如果你想要得到的是ndarray切片的一份副本而非视图,就需要显示地进行复制操作,例如arr[5:8].copy()。
在一个二维数组中,各索引位置上的元素不再是标量而是一维数组:
In[24]: arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
In[25]: arr2d[2]
#注意返回的值,是数组不是具体的标量
Out[25]: array([7, 8, 9])
「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」
「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」
利用Python进行数据分析