文章目录
1.创建numpy数组:
1.1numpy.array(直接把列表转化成数组)
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
表1:numpy.array各参数属性
参数 | 属性 |
---|---|
object | 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。 |
dtype | 数组的所需数据类型,可选。 |
copy | 可选,默认为true,对象是否被复制。 |
order | C(按行)、F(按列)或A(任意,默认)。 |
subok | 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。 |
ndimin | 指定返回数组的最小维数。 |
1.2等差数列建立numpy数组(arange,linspace)
1.2.1 nappy.arange(a,b,c)
arange 一般有三个参数 arange(a,b,c) a为等差数列的首项默认为0,c为公差,默认为1。若数列中的数为x,则x的取值范围为a≤x<b.这个跟range一样是左闭右开的,且,最后面一个数位步长。
1.2.2np.linspace(a,b,c)
跟arange一样linspace也有三个元素,linspace(a,b,c) 但有区别的,a还是一样是首项,但此时b是末项,c是项数,linspace这个函数更好理解,由于项数往往并不与首末项匹配,所以linspace里面所得的数是浮点数。
1.3随机数建立
numpy中的随机数一般有random来生成,主要有整数随机以及正态分布的随机数
1.3.1 numpy.random.rand(a,b)
生成一个数值在[0,1)之间,a行b列的随机数数组
1.3.2 numpy.random.randint(a,b,(c,d))
生成一个数值在[a,b)之间c行d列的数组
1.3.3 numpy.random.normal(E,u,(a,b))
生成一个均值为E,标准差为u,a行b列的数组
1.4填充创建(numpy.zeros,numpy.ones,numpy.fulls)
1.4.1numpy.fulls(shape,fill_value)
输出形状为shape,填充值为fill_value的多维矩阵
1.4.2 全零数组与全一数组的创建(numpy.zeros,numpy.ones).
np.zeros(shape)生成一个shape形状的多维零矩阵
np.ones(shape)生成一个shape形状的多维矩阵,且填充值为1
1.4.3对角创建numpy.eyes(N,M,K=0)
创建一个类单位矩阵,即对角线上为1,其余为0的数组。形状为N行M列,M的默认值与N 相等,k=0为主对角线,正直为上对角线,负值为下对角线
1.4.4 numpy.repeata,repeats,axis()函数 - 复制创建
a为原数组的值,repeats为axis轴上复制的次数。axis默认值为0
1.5不常用的创建
1.5.1等比数组创建numpy.longspace(start,end,num,base)
起始值为base的start次幂,end为base的终止次幂,num为范围内的数值数量,默认为50个
base为 空间底数,即公比默认为10
1.5.2自由创建 numpy.asarray(a)
a为任意形式的输入参数,如列表元组,列表的列表,列表的元组
1.5.3根据数组的形状创建
ones_like(a):根据数组a的形状生成一个全1的数组
zeros_like(a):根据数组a的形状生成一个全0的数组
full_like(a,val):根据数组a的形状生成一个数组,每个元素值都是val
1.5.4根据缓冲区创建numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
此函数将缓冲区解释为一维数组。 暴露缓冲区接口的任何对象都用作参数来返回ndarray。
numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
参数 说明
buffer 任何暴露缓冲区借口的对象。
dtype 通常,输入数据的类型会应用到返回的ndarray。
count 需要读取的数据数量,默认为-1,读取所有数据。
offset
需要读取的起始位置,默认为0。
1.5.5根据可迭代对象创建numpy.fromiter(iterable, count = -1)
iterable为任意可迭代对象,count为需要读取的数据数量,默认为-1,读取所有数据。
2.ndarray调整数组结构
2.1. ndarray数组的维度变换
方法 | 说明 |
---|---|
.reshape(shape) | 不改变数组元素,返回一个shape形状的数组,原数组不变 |
.resize(shape) | 与.reshape()功能一样,但修改原数组 |
.swapaxes(ax1, ax2) | 将数组n个维度中两个维度进行调换 |
.flatten() | 对数组进行降维,返回折叠后的一维数组,原数组不变,深拷贝 |
.ravel() | 对数组进行降维,返回折叠后的一维数组,原数组改变,浅拷贝 |
注意:
1)当改变形状时,应该考虑到数组中的元素的个数,确保改变前后,元素总个数相等。
2)reshape(shape)还可以根据数组中元素的总个数、以及其他维度的取值,来自动计算出这个维度的取值。通过-1来实现
2.2 ndarry数组的转置和轴对换(name.T)
二维转置 name. T
多维轴的交换 m = k.transpose((1,0,2)) # m[y][x][z] = k[x][y][z] (0:x, 1:y, 2:z)
2.3 nadarry数组的拼接
2.3.1 vstack:垂直堆叠
垂直堆叠。按照轴的标准看,则是axis=0,即按行拼接,将每一个水平行都堆叠在一起。那么列数必须相等。
2.3.2 hstack:水平堆叠
水平堆叠。按照轴的标准看,则是axis=1,即按列拼接,将每一个垂直列都堆叠在一起。那么
行数必须相等。
2.3.3 numpy.oncatenate([], axis)按轴堆叠
默认axis=0, 从第一层内容对应开始拼接
2.3.4 numpy.c_[a ,b] 水平拼接
和水平堆叠效果一样
2.4 nadarry数组的分割
2.4.1 hsplit:水平方向分成多个水平子数组
numpy.hsplit(ndarry,x):x 为指定均分为几部分,ndarry为要被均分的对象,不可均分则报错
hsplit(ndarray, [x, y]), 用列表代表分割的索引,不一定要均分,ndarry为要被均分的对象
2.4.2 vsplit:分成多个垂直子数组
vsplit(ndarray, x), x指定:均匀分成几部分,ndarry为要被均分的对象,不可均分则报错
vsplit(ndarray, [x, y]), 用列表代表分割的索引,不一定要均分,ndarry为要被均分的对象。
2.4.3 split / array_split(array, indicate_or_sections, axis)
axis指定按照哪一层进行切割,默认从axis=0、第0层为标准进行切割, 即vsplit方法,将垂直方向分成多个垂直子数组
3.数组运算:
3.1 数组简单运算
3.1.1 numpy.sum( narry,axis)
默认axis=0求行和,axis=1 求列和,narry为待求numpy数组
3.1.2 numpy.mean(narry)
求平均值 ,narry为待求numpy数组
3.1.3numpy.title矩阵复制
np.tile(a, (b, c)) # a为原,b为行复制把次数,c为列复制次数。
3.1.4 numpy.argsort(narry)
将元素按照行从小到大排序,返回对应位置元素的下标
3.1.5 ±*/四则运算是简单的对应位置元素的加减乘除运算
3.2 矩阵的运算
3.2.1numpy.mat()
如果使用 np.mat 将二维数组准确定义为矩阵,就可以直接使用 * 完成矩阵乘法
如:np.mat(A) * np.mat(B)
3.2.2转置矩阵
name.T
3.2.3 矩阵求逆
np.linalg.inv(A)
3.2.4矩阵广播运算
可直接简写为a+ b, numpy自动实现广播功能,当参与运算的操作数的维度不一样时。
如代码,他会把不足的矩阵自动广播。
输入
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = np.array([1, 2, 3])
a+b
输出
[[ 2, 4, 6],
[ 5, 7, 9],
[ 8, 10, 12]])
参考:
NumPy库的介绍与使用(一)
numpy库的使用——超详细