1.修改数组形状
reshape函数
函数reshape 在不改变数据的条件下修改形状,其格式如下。
numpy.reshape(arr, newshape, order='C')
# 全局函数
array.reshape(newshape,order='C')
# 成员函数
其函数参数如表所示。
import numpy as np
a = np.arange(12)
print("a=\n",a)
b = np.reshape(a,(2,6),order='C')
print("b=\n",b)
c = a.reshape((1,3,4),order='F')
print("c=\n",c)
d = a.reshape((2,3,2),order='F')
print("d=\n",d)
a=
[ 0 1 2 3 4 5 6 7 8 9 10 11]
b=
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
c=
[[[ 0 3 6 9]
[ 1 4 7 10]
[ 2 5 8 11]]]
d=
[[[ 0 6]
[ 2 8]
[ 4 10]]
[[ 1 7]
[ 3 9]
[ 5 11]]]
2、flatten函数
将高维度数组展平,返回一个一维的数组,其格式如下:
array. flatten(order='C')
a = np.arange(12).reshape(3,4)
print("a=\n",a)
b = a.flatten()
print("b=\n",b)
c = a.flatten(order='F')
print("c=\n",c)
d = a.flat[::] # 数组的flat属性
print("d=\n",d)
a=
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
b=
[ 0 1 2 3 4 5 6 7 8 9 10 11]
c=
[ 0 4 8 1 5 9 2 6 10 3 7 11]
d=
[ 0 1 2 3 4 5 6 7 8 9 10 11]
3、ravel函数
函数ravel 展平数组元素,返回的是数组视图,其函数格式如下所示:
numpy.ravel(a, order='C')
array.ravel(order='C')
与flatten()的不同:
1)使用ravel()创建的新数组实际上是对父数组的引用(即“视图”)。这意味着对新数组的任何更改也将影响父数组。因为ravel不创建拷贝,所以它的内存效率很高。
2)ravel函数有成员函数和全局函数两种形式,flatten只有成员函数形式。
2.翻转数组
transpose 对换数组的维度
swapaxes 对换数组的两个轴
1、numpy.transpose函数
交换数组的维度索引值(轴序号),格式如下所示:
numpy.transpose(arr, axes)
narray.transpose(axes)
参数说明如下所示:
•
arr:要操作的数组。
•
axes:整数序列,对应维度
序号
。若是2维,则可省略该参数,直接
交换行列,即转置。
2、numpy.swapaxes函数
numpy.swapaxes函数用于交换数组的
两个轴
,格式如下所示:
numpy.swapaxes(arr, axis1, axis2)
narray.swapaxes(axis1, axis2)
swapaxes实际上也是针对轴索引进行变化,区别就在于transpose可以一次传入多个参数,对若干轴进行交换,而swapaxes只能两两置换,且swapaxes(i,j)和
swapaxes(j,i)没有区别。
3、连接数组
1、numpy.concatenate
numpy.concatenate函数用于
沿指定轴
连接
形状兼容、维度相同
的两个或多
个数组,格式如下所示。
numpy.concatenate((a1, a2, ...), axis=0)
参数:
(a1, a2, ...):形状兼容的数组组成的元组。
axis:沿着它连接数组的轴序号,默认为 0。
2、numpy.hstack
•
在水平方向上堆叠
两个或多个
形状兼容的数组形成新的数组。
•
机器学习数据集准备过程中,可以用于将数据列与标签列在水平方向上合并,从而得到带标签的数据集。
3、numpy.vstack
•
在垂直方向上堆叠两个或多个形状兼容的数组形成新的数组。
•
机器学习数据集准备过程中,可以用于将标题行以及从多个数据文件中加载的数
据行在垂直方向上合并,从而将所有数据集整合为一个数据集。
4、分割数组
1、 numpy.split
numpy.split函数沿特定的轴将数组分割为
子数组
,返回值增加一维:
numpy.split(array, indices_or_sections, axis)
参数array:被分割的数组。
indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,
为沿轴切分的位置。
axis:沿着哪个维度进行切分,
默认为0
。
2、numpy.hsplit
numpy.hsplit函数用于
水平均分数组
,不能均分则出错。
numpy.hsplit(array, indices_or_sections)
3、numpy.vsplit
numpy.vsplit沿着
垂直
轴
均分数组
,不能均分则出错。
numpy.hsplit(array, indices_or_sections)
数组元素添加与删除
1、numpy.resize
按照shape的形状
拓展
arr,
不够的
依次按原数组单个元素排列顺序补全,返回指
定大小的新数组。
numpy.resize(arr, shape)
# 全局函数,返回新形状数组,不修改原数组arr
arr.resize(shape)
# 成员函数,原地修改arr形状,返回值为None
•
arr:要修改大小的数组。
•
shape:新形状(数组或序列)。
注意:
numpy.resize可以多退少补数据,array.reshape必须和原数组数据量一样
2、numpy.append
numpy.append函数在数组的末尾添加值,
输入数组的形状必须与原数组匹配
,
否则出错。
append 格式:
numpy.append(arr, values, axis=None)
•
arr:输入数组。
•
values:要向arr添加的值,
需要和arr形状
(除了要添加的轴)和
维度相同
。
•
axis:默认为 None。
•
axis为None时,是横向加成,返回一维数组。
•
axis为0时,数据是加在下边(列数要相同);
•
axis为1时,数组是加在右边(行数要相同)。
3、numpy.insert
numpy.insert函数在给定索引之前,沿给定轴在输入数组中插入值。
numpy.insert(arr, index, values, axis=None)
•
arr:输入数组。
•
index:在其之前插入值的索引,可以是序列数据(如元组、列表),实现在
多个索引之前插入数据。
•
values:要插入的数据,可以是序列数据,但其形状必须与原数组匹配。
•
axis:沿着它插入的轴,
如果未提供,则输入数组会被展开。
5、numpy.delete
numpy.delete函数返回从输入数组中删除指定子数组的新数组。 与insert()函
数的情况一样,
如果未提供轴参数,则输入数组将展开
。
numpy.delete(arr, obj, axis)
•
arr:输入数组。
•
obj:可取值为
slice(前闭后开)、
int 、int类型的array、int类型的序列等,
指示要沿指定轴删除的子数组的
索引
。
•
axis未指定:arr会先按行展开,然后按照obj删除,返回一个行矩阵。
•
axis = 0:按行删除
•
axis = 1:按列删除
6、索引和切片
ndarray对象的内容可以通过索引或切片来访问和修改. ndarray数组可以基于0 - n-1的下标进行索引
·两种切片方式:①通过内置的slice(start, stop, step)函数;②通过冒号分隔切片参数start:stop:step
花式索引(Fancy indexing)是指利用
数组、列表、元组等可迭代类型
进行索引。