numpy数组的切片
个人学习笔记!
切片语法:
x[ start : stop : step ]
一、一维数组的切片
import numpy as np
x = np.arange(5,13)
x
Out[4]:array([ 5, 6, 7, 8, 9, 10, 11, 12])
x[:3]#前3个元素,即索引0~2所代表的元素
Out[6]:array([5, 6, 7])
x[3:]#索引3及往后的所有元素
Out[7]:array([ 8, 9, 10, 11, 12])
x[::2]#每隔一个元素
Out[8]:array([ 5, 7, 9, 11])
x[::-1]#数组元素逆序
Out[9]:array([12, 11, 10, 9, 8, 7, 6, 5])
二、多维数组的切片
以二维为例:
import numpy as np
x=np.random.randint(0,11,(3,4))
x
Out[12]:
array([[2, 7, 3, 0],
[1, 1, 0, 1],
[4, 3, 0, 6]])
x[:2,:3]#前两行,前三列
Out[13]:
array([[2, 7, 3],
[1, 1, 0]])
x[::-1,::-1]#数组所有元素逆序
Out[15]:
array([[6, 0, 3, 4],
[1, 0, 1, 1],
[0, 3, 7, 2]])
#获取二维数组的单行和单列:索引+切片
x[:,1]#第2列
Out[16]:
array([7, 1, 3])
三、数组切片返回的不是数据的副本
与python内置数据类型list相区别,list切片返回的是值的副本。而numpy数组切片返回的是数组数据的视图,不是数值数据的副本(摘自python数据科学手册),接下来从代码理解:
x
Out[19]:
array([[2, 7, 3, 0],
[1, 1, 0, 1],
[4, 3, 0, 6]])
x_sub = x[:2,:2]
x_sub
Out[22]:
array([[2, 7],
[1, 1]])
x_sub[0,0]=5 #数组切片的值被修改后,原数组也被修改了
Out[23]:
array([[5, 7, 3, 0],
[1, 1, 0, 1],
[4, 3, 0, 6]])
四、创建numpy数组的副本
用copy()方法。代码略...