a = np.arange(10)
s =slice(2,7,2)# start, stop 及 step 参数
b = a[s]
c = a[2:7:2]# b和c相等 都是切片操作,将原数组切割成一个新的数组-----------------------------------------------------------------------------------------------print(a[...,1])# 第2列元素print(a[1,...])# 第2行元素print(a[...,1:])# 第2列及剩下的所有元素 -----------------------------------------------------------------------------------------------# 数组索引
x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]-----------------------------------------------------------------------------------------------# 布尔索引
x = np.array([[6,1,2],[3,4,5],[6,7,8],[9,10,11]])print(x[x >5])-----------------------------------------------------------------------------------------------
数组广播(跳过原因:原理性性质的理解)
数组遍历(迭代)
a = np.arange(6).reshape(2,3)for x in np.nditer(a):print(x, end=", ")-----------------------------------------------------------------------------------------------for x in np.nditer(a.T.copy(order='C')):print(x, end=", ")# 访问顺序是一致的,只是a.T.copy(order = 'C')存储方式是不一样的,默认是按行访问-----------------------------------------------------------------------------------------------# 修改遍历的顺序for x in np.nditer(a, order='F'):# Fortran order,即是列序优先;for x in np.nditer(a.T, order='C'):# C order,即是行序优先;-----------------------------------------------------------------------------------------------
a = np.arange(0,60,5)
a = a.reshape(3,4)for x in np.nditer(a, op_flags=['readwrite']):
x[...]=2*x # x=2*x 修改不成功 没有找到解答# nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了# 在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。-----------------------------------------------------------------------------------------------# 使用外部循环for x in np.nditer(a, flags =['external_loop'], order ='F'):print(x, end=", ")# _index 可以跟踪 C 顺序的索引# f_index 可以跟踪 Fortran 顺序的索引# multi-index 每次迭代可以跟踪一种索引类型# external_loop 给出的值是具有多个值的一维数组,而不是零维数组-----------------------------------------------------------------------------------------------# 广播迭代(跳过)
数组操作
修改数组形状
函数
描述
reshape
不改变数据的条件下修改形状(维度的改变)
flat
数组元素迭代器
flatten
返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
ravel
返回展开数组
a = np.arange(9).reshape(3,3)
a.flatten(order ='F')
a.ravel(order ='F')
翻转数组
函数
描述
transpose
对换数组的维度
ndarray.T
和 self.transpose() 相同
rollaxis
向后滚动指定的轴
swapaxes
对换数组的两个轴
b = np.transpose(a)
b = a.T
-----------------------------------------------------------------------------------------------
numpy.rollaxis(arr, axis, start)# arr:数组# axis:要向后滚动的轴,其它轴的相对位置不会改变# start:默认为零,表示完整的滚动。会滚动到特定位置。-----------------------------------------------------------------------------------------------
numpy.swapaxes(arr, axis1, axis2)# arr:输入的数组# axis1:对应第一个轴的整数# axis2:对应第二个轴的整数