Numpy学习之 一维数组元素选取

ndarray的一维数组的元素选取与Python列表的切片操作很相似,与列表不同的时,获取的数据组成一个新数组但与原有的数组共享一个内存存储空间,即数据更改获取得到的数据中某个元素的值,原有数组也会产生相应变化。
下面列举其种常见的选取方式
首页使用arange快速创建一个一维数组

#coding=utf-8
import numpy as np
arr1 = np.arange(10)

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

1.使用整数为下标选取数组中的某一个元素

#取第1个元素
print arr1[0] #输出 0

2.使用负数为下标反向选择数据中的某一个元素

#取第1个元素
print arr1[-1] #输出9

3.使用切片做为下标选取数据中一部分

(1) 完整的切片形式

[开始索引:结束索引:步长]
如省略开始索引,则开始索引值为0
如省略结束索引,则结束索引值为数组对应元素最大索引值
如省略步长,则步长值为1

#取索引为0(包含)到索引为2(不包含)之间的元素且步长为1(即第1个和第2个元素)
print arr1[0:2:1] #输出 [0,1]
#取索引为0(包含)到索引为10(不包含)之间的元素且步长为2(即第1、3、5、7、9个元素)
print arr1[0:10:2] #[0 2 4 6 8]

(2) 省略步长

#取索引为0(包含)到索引为2(不包含)之间的元素(即第1个和第2个元素)
print arr1[0:2] #输出 [0,1]

(3) 省略结束索引

#从索引为1的元素且步长为2选取元素
print arr1[1::2] #输出 [1 3 5 7 9]

(4) 省略结束索引和步长

#从索引为1的元素开始选取元素
print arr1[1:] #输出 [1 2 3 4 5 6 7 8 9]
print arr1[1::] #与上面效果相同,输出 [1 2 3 4 5 6 7 8 9]

(5) 省略开始索引

#选取索引为0到2之间
print arr1[:2:1] #输出 [0,1] 这个与arr1[0:2]效果相同

(5) 省略开始索引及步长

#选取索引为0到2之间
print arr1[:2:] #输出 [0,1] 这个与arr1[0:2]效果相同

(6) 省略开始索引及结束索引

#以步长为2选择数组中的元素
print arr1[::2] #输出 [0 2 4 6 8]

4.使用负数步长来翻转数组

#使用负数索引来翻转
print arr1[::-1] #输出[9 8 7 6 5 4 3 2 1 0]
print arr1[::-2] #输出[9 7 5 3 1]

备注:如果是用切片形式选择数组中的一部分元素,会形成一个新的数组(可以通过 type查看)且其与原有数组共享一个内存存储块,如果更改新生成的数组中的元素值,则原有数据对应索引位置的元素的值也会改变,如下列所示

import numpy as np
arr1 = np.arange(10)
print arr1 #输出 [0 1 2 3 4 5 6 7 8 9]
arr2= arr1[2:5]
print arr2 #输出 [2 3 4]
arr2[1]=20
print arr2 #输出 [2 20 4]
print arr1 #输出 [0 1 2 20 4 5 6 7 8 9]

5、使用整数列表选取
使用整数列表对数组进行选取操作时,会将整数列表的值做为下标来选取数组;与使用切片形式做为下标不同的是,选取得到的数组不会与原有数据共享一个内存存储块;即更改得到的新数组值不会影响原有数组

# coding=utf-8
import numpy as np
arr1 = np.arange(10)
print arr1 #输出 [0 1 2 3 4 5 6 7 8 9]
arr2=arr1[[1,1,5,6]]
print arr2 #输出 [1 1 5 6 ]
arr2[0]=-1 #更改得到的新数组值不会影响原有数组
print arr1 #输出 [0 1 2 3 4 5 6 7 8 9]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章