NumPy 基础:函数总结

您所在的位置:网站首页 numpy的sign函数 NumPy 基础:函数总结

NumPy 基础:函数总结

2023-10-02 04:14| 来源: 网络整理| 查看: 265

文章目录 1 NumPy - 数组生成函数2 NumPy - 数组的一些基本属性3 NumPy - 修改数组的形状4 NumPy - 数组元素的添加/删除5 NumPy - 数组的连接/分割函数6 NumPy - 通用函数7 NumPy - 字符串函数8 NumPy - 排序函数9 NumPy - 统计函数10 NumPy - 线性代数11 NumPy - 伪随机数生成函数 最近重新学习发现,NumPy 中有很多很多的函数,以下根据个人和结合官网对函数的理解,整理了一些关于NumPy 中常用的一些基础函数。本文仅供参考,如有错误请予以批评指正,如需转载请标记出处。

1 NumPy - 数组生成函数

Numpy 中最常规的就是利用array函数来生成一个新的包含传递数据的NumPy 数组。array函数,参数如下:

import numpy as np array1=np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) 参数描述object传入的数据,可以使列表(list)、集合(set)、元组(tuple)、字符串(str)等dtype数组的所需数据类型,默认为空,可选,如:dtype=np.float64等copy对象是否需要复制,默认为TrueoderC(按行)、F(按列)、A(任意,默认)subok默认情况下,返回的数组被强制为基类数组。 如果为True,则返回子类ndmin指定返回数组的维数,如ndmin=2。

除了array函数以外,还有以下一些生成函数,只是参数或多或少发生改变:

生成函数描述array传入的数据x(可以是列表、集合、元组、字符串等)转换为ndarray,具体参数如上表asarrayarray和asarray作用相同,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。numpy.asarray(a, dtype=None, order=None)empty它创建指定形状和dtype的未初始化数组。 它使用以下构造函数:numpy.empty(shape, dtype = float, order = 'C')zeros返回特定大小,以 0 填充的新数组: numpy.zeros(shape, dtype = float, order = 'C')ones返回特定大小,以 1 填充的新数组: numpy.ones(shape, dtype = None, order = 'C')eye创建一个N * N的单位矩阵(对角线为1,其余为0): numpy.eye(N, M=None, k=0, dtype=, order='C')arange这个函数返回ndarray对象,包含给定范围内的等间隔值:numpy.arange(start, stop, step, dtype)linspace此函数类似于arange()函数。 在此函数中,指定了范围之间的均匀间隔数量,而不是步长。 此函数的用法如下:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)logspace此函数返回一个ndarray对象,其中包含在对数刻度上均匀分布的数字。 刻度的开始和结束端点是某个底数的幂,通常为 10:numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

*注:

shape 空数组的形状,整数或整数元组;dtype 所需的输出数组类型,可选;order 'C’为按行的 C 风格数组,'F’为按列的order 'C’为按行的 C 风格数组,'F’为按列的Fortran 风格数组;start 序列的起始值;stop 序列的终止值,如果endpoint为true,该值包含于序列中;num 要生成的等间隔样例数量,默认为50;retstep 如果为true,返回样例,以及连续数字之间的步长;base 对数空间的底数,默认为10*

例如:

import numpy as np ndarray = np.empty((4,4)) print("4x4主对角为1的empty矩阵") print(ndarray) ndarray1 = np.ones((4,4)) print("4x4元素全为1矩阵") print(ndarray1) ndarray2 = np.zeros((4,4)) print("4x4元素全为0矩阵") print(ndarray2) ndarray3 = np.eye(4) print("4x4单位矩阵") print(ndarray3) ndarray4 = np.linspace(0,100,num=11) print("0-100,生成11个数") print(ndarray4) ndarray5 = np.logspace(0,100,num=11) print("0-100,生成11个对数") print(ndarray5)

输出:

4x4主对角为1的empty矩阵 [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] 4x4元素全为1矩阵 [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] 4x4元素全为0矩阵 [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] 4x4单位矩阵 [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] 0-100,生成11个数 [ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.] 0-100,生成11个对数 [1.e+000 1.e+010 1.e+020 1.e+030 1.e+040 1.e+050 1.e+060 1.e+070 1.e+080 1.e+090 1.e+100] 2 NumPy - 数组的一些基本属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

import numpy as np #生成一个5*5的单位矩阵 ndarray = np.ones((5,5)) #输出数组 ndarray 的维度 print(ndarray.shape) #输出数组 ndarray 的总个数 print(ndarray.size) #输出数组 ndarray 中每个元素的大小 print(ndarray.itemsize)

输出结果为:

(5, 5) 25 8

NumPy 的数组中比较重要 ndarray 对象属性有:

函数描述ndarray.ndim秩,即轴的数量或维度的数量ndarray.shape数组的维度,对于矩阵,n 行 m 列ndarray.size数组元素的总个数,相当于 .shape 中 n*m 的值ndarray.dtypendarray 对象的元素类型ndarray.itemsizendarray 对象中每个元素的大小,以字节为单位ndarray.flagsndarray 对象的内存信息ndarray.realndarray元素的实部ndarray.imagndarray 元素的虚部ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 3 NumPy - 修改数组的形状 函数描述ndarray.reshape在不改变数据的条件下修改形状,格式如下: ndarray.reshape(shape, order='C')或者numpy.reshape(arr, newshape, order='C')ndarray.flat将数组转换为1-D的迭代器ndarray.flatndarray.flatten将多维数组将为一维数组,返回一份数组拷贝,对拷贝所做的修改不会影响原始数组ndarray.flatten(order='C')numpy.ravel将多维数组将为一维数组,返回的是视图修改会影响原始数组,numpy.ravel(a, order='C')

例如:

import numpy as np ndarray = np.ones((4,4)) print(ndarray) print(ndarray.shape) ndarray1 = ndarray.reshape(2,8) print(ndarray1) print(ndarray1.shape) print(ndarray.flatten())

输出结果为:

[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] (4, 4) [[1. 1. 1. 1. 1. 1. 1. 1.] [1. 1. 1. 1. 1. 1. 1. 1.]] (2, 8) [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] 4 NumPy - 数组元素的添加/删除 函数描述resize返回指定形状的新数组,如果新数组大小大于原始大小,则包含原始数组中的元素的副本。:numpy.resize(arr, shape)append将值添加到数组末尾,输入数组的维度必须匹配否则将生成ValueError。numpy.append(arr, values, axis=None)insert沿指定轴将值插入到指定下标之前。numpy.insert(arr, obj, values, axis)delete删掉某个轴的子数组,并返回删除后的新数组。Numpy.delete(arr, obj, axis)unique查找数组内的唯一元素,函数用于去除数组中的重复元素:numpy.unique(arr, return_index, return_inverse, return_counts) 注:axis:默认为 None。当axis无定义时,是横向加成,返回总是为一维数组!当axis有定义的时候,分别为0和1的时候。当axis有定义的时候,分别为0和1的时候(列数要相同)。当axis为1时,数组是加在右边(行数要相同)

例如:

import numpy as np ndarray2 = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(ndarray2) print("----------------") ndarray3 = np.resize(ndarray2,(4,3)) print(ndarray3) print("----------------") ndarray4 = np.append(ndarray2,[0,0,0]) ndarray5 = np.append(ndarray2,[[0,0,0]],axis=0) print(ndarray4) print("----------------") print(ndarray5) ndarray6 = np.delete(ndarray2,2,axis=0) print("----------------") print(ndarray6)

输出:

[[1 2 3] [4 5 6] [7 8 9]] ---------------- [[1 2 3] [4 5 6] [7 8 9] [1 2 3]] ---------------- [1 2 3 4 5 6 7 8 9 0 0 0] ---------------- [[1 2 3] [4 5 6] [7 8 9] [0 0 0]] ---------------- [[1 2 3] [4 5 6]] 5 NumPy - 数组的连接/分割函数

NumPy 中的数组连接和分割函数,Python 和本身并无太大差别,以下简单示例。

函数描述concatenate函数用于沿指定轴连接相同形状的两个或多个数组。 该函数接受以下参数:numpy.concatenate((a1, a2, ...), axis=0)stack此函数将相同形状的数组序列,沿指定轴来堆叠。numpy.stack(arrays, axis=0)hstackstack函数的变体,通过堆叠来生成水平的单个数组。vstackstack函数的变体,通过堆叠来生成竖直的单个数组。split该函数沿特定的轴将数组分割为子数组。函数接受三个参数:numpy.split(ary, indices_or_sections, axis=0)hsplithsplit是split()函数的特例,其中轴为 1 表示水平分割,无论输入数组的维度是什么。numpy.hsplit(ary, indices_or_sections)vsplitvsplit是split()函数的特例,其中轴为 0 表示竖直分割,无论输入数组的维度是什么。numpy.vsplit(ary, indices_or_sections)

*注: indices_or_sections:可以是整数,表明要从输入数组创建的,等大小的子数组的数量。 如果此参数是一维数组,则其元素表明要创建新子数组的点。

例如:

import numpy as np ndarray1 = np.ones((4,4)) print("4x4元素全为1矩阵") print(ndarray1) ndarray2 = np.zeros((4,4)) print("4x4元素全为0矩阵") print(ndarray2) ndarray3 = np.eye(4) print("4x4单位矩阵") print(ndarray3) ndarray_concatenate = np.concatenate((ndarray1,ndarray2),axis=0) print("沿指定轴连接") print(ndarray_concatenate) ndarray_stack = np.stack((ndarray1,ndarray2),axis=0) print("沿指定轴堆叠") print(ndarray_stack) print("堆叠后的维度是不同的") print(ndarray_stack.shape) ndarray_split = np.split(ndarray_concatenate,indices_or_sections=8, axis=0) print("沿特定的轴将数组分割为子数组") print(ndarray_split)

输出:

4x4元素全为1矩阵 [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] 4x4元素全为0矩阵 [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] 4x4单位矩阵 [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] 沿指定轴连接 [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] 沿指定轴堆叠 [[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]] 堆叠后的维度是不同的 (2, 4, 4) 沿特定的轴将数组分割为子数组 [array([[1., 1., 1., 1.]]), array([[1., 1., 1., 1.]]), array([[1., 1., 1., 1.]]), array([[1., 1., 1., 1.]]), array([[0., 0., 0., 0.]]), array([[0., 0., 0., 0.]]), array([[0., 0., 0., 0.]]), array([[0., 0., 0., 0.]])] 6 NumPy - 通用函数

通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。你可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。

一元通用函数

一元通用函数只接受一个数组,并返回一个结果数组。

函数描述abs(x)、fabs(x)计算数组各元素的绝对值sqrt(x)计算数组各元素的平方根square(x)计算数组各元素的平方exp(x)计算各元素的自然指数值e^xsign(x)计算各元素的符号值:1(正)、0(0)、-1(负)ceil(x)计算大于等于给定值的最小整数值floor(x)计算大于等于给定值的最大整数值rint(x)四舍五入到最近的整数,保留dtypemodf(x)将数组的小数和整数部分以两个独立的数组方式返回log(x)、log10(x)、log2(x)计算自然对数、底为10的log、底为2的logisnan(x)返回一个判断是否是NaN的bool型数组isfinite(x)返回一个判断是否是无穷的bool型数组isinf(x)计算大于等于给定值的最小整数值cos、cosh、sin、sinh、tan、tanh普通型和双曲型三角函数arccos、arccosh、arcsin、arcsinh、arctan、arctanh反三角函数和双曲型反三角函数

例如:

import numpy as np ndarray = np.array([[1,2,3],[4,5,6],[7,8,9]]) print("生成一个3x3的矩阵:") print(ndarray) ndarray_sqrt = np.sqrt(ndarray) print("平方根:") print(ndarray_sqrt) ndarray_exp = np.exp(ndarray) print("指数:") print(ndarray_exp) ndarray_log = np.log10(ndarray) print("10为底的对数:") print(ndarray_log) ndarray_tan = np.tan(ndarray) print("正切:") print(ndarray_tan)

输出:

生成一个3x3的矩阵: [[1 2 3] [4 5 6] [7 8 9]] 平方根: [[1. 1.41421356 1.73205081] [2. 2.23606798 2.44948974] [2.64575131 2.82842712 3. ]] 指数: [[2.71828183e+00 7.38905610e+00 2.00855369e+01] [5.45981500e+01 1.48413159e+02 4.03428793e+02] [1.09663316e+03 2.98095799e+03 8.10308393e+03]] 10为底的对数: [[0. 0.30103 0.47712125] [0.60205999 0.69897 0.77815125] [0.84509804 0.90308999 0.95424251]] 正切: [[ 1.55740772 -2.18503986 -0.14254654] [ 1.15782128 -3.38051501 -0.29100619] [ 0.87144798 -6.79971146 -0.45231566]]

二元通用函数

二元通用函数接受两个数组,并返回一个结果数组。

函数描述add(x,y)数组的对应元素相加x+ysubtract(x,y)数组的对应元素相减x-ymultiply(x,y)数组的对应元素相乘x*ydivide(x,y)数组的对应元素相除x/yfloor_divide(x,y)数组的对应元素整除(舍去余数)power(x,y)次方(以x为准,y的次方)mod(x,y)求模(取余数)maximum(x,y),minimun(x,y)求最大值,最小值fmax(x,y),fmin(x,y)求最大值,最小值(忽略NaN)copysign(x,y)修改符号,将x的符号值改为y的符号值greater、greater_equal、less、less_equal、equal、not_equal同>、>=、


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3