NumPy-基础索引与切片

基础索引与切片

首先你新创建了额一个 ndarray 数组:

arr = np.arange(10)

和python的列表相似的,你可以通过索引和切片来取值

print(arr[6]) #索引从0开始
print(arr[5:8]) #顾头不顾尾

6
[5 6 7]

和列表一样,数组里的切片取值也是顾头不顾尾,并且索引是从0开始的。

重要的一个例子

arr = np.arange(10)
piece_of_arr = arr[4:6]
piece_of_arr[:] = 24
print(arr)

[ 0 1 2 3 24 24 6 7 8 9]

是的,区别于Python的内建列表,数组的切片是原数组的视图,也就意味着数据并不是被复制了一份,任何对于仕途的修改都会反映到原数组上。

相比于其他的数组编程语言都是更为急切的复制数据,由于NumPy被设计成适合处理非常大的数组,所以不会那么轻易的让开发者复制,你可以想想一下如果NumPy持续复制数据会引起多少内存问题。

但是如果你还是要一份数组切片的拷贝,而不是一份视图的话,就必须显式的复制这个数组,

比如:arr[5 : 8].copy()

数组的切片索引

import numpy as np
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1)
print('-----------')
print(arr1[:2])   #切片第1行到第2行,每一列的元素都要
print('-----------')
print(arr1[:2, 1:])  #切片第1行到第2行,第2列到最后一列
print('-----------')
print(arr1[1,:2])   #切片第2行,第1列到第2列的元素
print('-----------')
print(arr1[:,:1])  #切片每一行,第一列的元素
print('-----------')
arr1[:2, 1:] = 0   #切片第1行到第2行,第2列到最后一列的元素,并把切片结果全都改为0,所以会映射回原数组。
print(arr1)
print('-----------')

结果

[[1 2 3]
 [4 5 6]
 [7 8 9]]
-----------
[[1 2 3]
 [4 5 6]]
-----------
[[2 3]
 [5 6]]
-----------
[4 5]
-----------
[[1]
 [4]
 [7]]
-----------
[[1 0 0]
 [4 0 0]
 [7 8 9]]
-----------

posted @ 2019-10-21 23:01  chanyuli  阅读(156)  评论(0编辑  收藏  举报