Numpy中常用函数
常用函数:
实验代码:
import numpy as np
1、切片与索引
1.1维数组索引
1)创建一个数组a,对a进行反向切片操作
a=np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
2) 间隔取值
a[::2]
array([0, 2, 4, 6, 8])
3) 取数组a前5个元素
a[:5]
array([0, 1, 2, 3, 4])
2.二维数组索引
二维数组中,各索引位置上的元素不再是标量,而是一维数组。
1) 创建一个二维数组arr1,索引第0行,即下标为0的元素
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr1
array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
arr1[0]
array([1, 2, 3])
2) 索引第1行第2列即下标为[1,2]的元素。
arr1[1,2]
6
3.多维数组索引
多维数组里,单个索引值返回的是一个纬度低一点的数组。
1) 创建一个2维数组arr2。
arr2=np.arange(36).reshape(6,6)
arr2
array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11],[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])
2) 取得arr2数组中第2行元素
arr2[1]
array([ 6, 7, 8, 9, 10, 11])
3) 取得arr2数组中第3列元素
arr2[:,3]
array([ 3, 9, 15, 21, 27, 33])
4) 取arr2数组中行下标为1到3,列下标为2到3的数组。
arr2[1:4,2:4]
array([[ 8, 9],[14, 15],[20, 21]])
5) 取arr2数组中行列下标步长为2的元素
arr2[::2,::2]
array([[ 0, 2, 4],[12, 14, 16],[24, 26, 28]])
4.利用整数数组进行索引
1) 新建两个数组a,i,使用数组i的值作为下标对数组a进行索引。
a=np.arange(12)**2
i=np.array([1,1,3,8,5])
a
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121],dtype=int32)
a[i]
array([ 1, 1, 9, 64, 25], dtype=int32)
5.当被索引数组a是多维的时,每一个唯一的索引数列指向a的对应行数。
palette = np.array( [ [0,0,0],[255,0,0],[0,255,0],[0,0,255],[255,255,255]] ) image = np.array( [ [ 0, 1, 2, 0 ],[ 0, 3, 4, 0 ] ] ) palette
array([[ 0, 0, 0], [255, 0, 0], [ 0, 255, 0], [ 0, 0, 255], [255, 255, 255]])
image
array([[0, 1, 2, 0], [0, 3, 4, 0]])
palette[image]
array([[[ 0, 0, 0], [255, 0, 0], [ 0, 255, 0], [ 0, 0, 0]], [[ 0, 0, 0], [ 0, 0, 255], [255, 255, 255], [ 0, 0, 0]]])
6.通过两个数组i,j作为下标对数组a进行索引,这时a[i,j]为数组i和数组j相同位置的对应数值两两组成一对索引,然后用这对索引在数组a中进行取值,必须保证数组i与数组j的维数相同。
a=np.arange(12).reshape(3,4) a
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
i=np.array([[0,1],[1,2]]) i
array([[0, 1], [1, 2]])
j=np.array([[2,1],[3,3]]) j
array([[2, 1], [3, 3]])
a[i,j]
array([[ 2, 5], [ 7, 11]])
7.通过argmax方法索引数组中最大元素的索引,搜索下面sin值的最大索引,这里四舍五入后值的最大索引。
data=np.sin(np.arange(20)).reshape(5,4) data
array([[ 0. , 0.84147098, 0.90929743, 0.14112001], [-0.7568025 , -0.95892427, -0.2794155 , 0.6569866 ], [ 0.98935825, 0.41211849, -0.54402111, -0.99999021], [-0.53657292, 0.42016704, 0.99060736, 0.65028784], [-0.28790332, -0.96139749, -0.75098725, 0.14987721]])
ind=data.argmax(axis=0) ind
array([2, 0, 3, 1], dtype=int64)
8.np.sin()
numpy.sin(x, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) = <ufunc ‘sin’>
三角正弦,元素方式。
参数:
x: : array_like
角度,以弧度(2 \pirad等于360度)。
out: : ndarray, None, 或 tuple of ndarray and None, 可选参数
结果存储的位置。如果提供,它必须具有输入广播到的形状。如果未提供或没有,则返回一个新分配的数组。元组(只能作为关键字参数)的长度必须等于输出的数量。
where: : array_like, 可选参数
此条件通过输入广播。在条件为True的位置,将out数组设置为ufunc结果。在其他地方,out数组将保留其原始值。请注意,如果通过默认创建未初始化的输出数组out=None,条件中为False的位置将保持未初始化状态。
**kwargs:
返回值:
y: : 数组
x的每个元素的正弦。如果x是标量,则这是标量。
np.sin(np.pi/2.)
1.0
9.布尔值索引
布尔值索引指的是一个由布尔值组成的数组可以作为一个数组的索引,返回的数据为True值对应位置的值
1)通过布尔数组索引,创建加一个数组a,使用a>4得到的布尔型数组b对数组a进行索引,取满足b数组中为True条件时,数组a的值。
a=np.arange(12).reshape(3,4) a
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
b=a>4 b
array([[False, False, False, False], [False, True, True, True], [ True, True, True, True]])
a[b]
array([ 5, 6, 7, 8, 9, 10, 11])
由上面的操作可以看出,数组切片是原始数组的视图,但是任何修改都会直接反映到原数组上:下面是对数组a本身进行修改,将满足b为True条件a的值改为0。
a[b]=0a
array([[0, 1, 2, 3], [4, 0, 0, 0], [0, 0, 0, 0]])
10.通过布尔来索引的方法更近似于整数索引;
1) 对数组的每个维度我们给一个一维布尔数组来选择我们想要的切片
a=np.arange(12).reshape(3,4) a
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
b1=np.array([False,True,True]) b1
array([False, True, True])
b2=np.array([True,False,True,False]) b2
array([ True, False, True, False])
a[b1,:]
array([[ 4, 5, 6, 7], [ 8, 9, 10, 11]])
注意一维数组的长度必须和你想要切片的维度或轴的长度一致,在之前的例子中,b1是一个秩为1长度为三的数组(a的行数),b2(长度为4)与a的第二秩(列)相一致。
2、条件查询
1.创建a,b数组,使用take()函数,根据b中元素作为索引,查找a中元素的值。
a=np.arange(1,11) a
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
b=np.array([1,4,6]) b
array([1, 4, 6])
np.take(a,b)
array([2, 5, 7])
2.创建数组x,使用np.argwhere函数,查找x大于1的元素,返回数组x的下标和元素个数。
x = np.arange(6).reshape(2,3) x
array([[0, 1, 2], [3, 4, 5]])
np.argwhere(x>1)
array([[0, 2], [1, 0], [1, 1], [1, 2]], dtype=int64)
3.使用np.extract函数,查找x大于2的元素,返回满足条件的数组元素。
np.extract([x>2],x)
array([3, 4, 5])
4.使用np.where函数,查找x大于2的元素,返回满足条件的数组元素的索引值。
np.where(x>2)
(array([1, 1, 1], dtype=int64), array([0, 1, 2], dtype=int64))
5.ix_ 函数可以合并不同的向量来获得多个元组的结果
1)如果你想要用所有向量a、b和c元素组成的三元组来计算 a+b*c
a=np.array([2,3,4,5]) b=np.array([8,5,4]) c=np.array([5,4,6,8,3]) ax,bx,cx=np.ix_(a,b,c) ax
array([[[2]], [[3]], [[4]], [[5]]])
bx
array([[[8], [5], [4]]])
cx
array([[[5, 4, 6, 8, 3]]])
ax.shape,bx.shape,cx.shape
((4, 1, 1), (1, 3, 1), (1, 1, 5))
result=ax+bx*cxresult
array([[[42, 34, 50, 66, 26], [27, 22, 32, 42, 17], [22, 18, 26, 34, 14]], [[43, 35, 51, 67, 27], [28, 23, 33, 43, 18], [23, 19, 27, 35, 15]], [[44, 36, 52, 68, 28], [29, 24, 34, 44, 19], [24, 20, 28, 36, 16]], [[45, 37, 53, 69, 29], [30, 25, 35, 45, 20], [25, 21, 29, 37, 17]]])
result[3,2,4]
17
a[3]+b[2]*c[4]
17
3、数组组合
1.水平组合(np.hstack(),np.concatenate(axis=1))
1)创建一个数组a,再将a每个值乘以2构成数组b
a=np.array([[1,2,3],[4,5,6],[7,8,9]]) a
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a*2b
array([[ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
2) 使用np.hstack()函数对数组a,b进行水平组合.
np.hstack((a,b))
array([[ 1, 2, 3, 2, 4, 6], [ 4, 5, 6, 8, 10, 12], [ 7, 8, 9, 14, 16, 18]])
3) 使用np.concatenate(axis=1)函数对数组a,b进行水平组合.
np.concatenate((a,b),axis=1)
array([[ 1, 2, 3, 2, 4, 6], [ 4, 5, 6, 8, 10, 12], [ 7, 8, 9, 14, 16, 18]])
2.垂直组合(np.vstack(),np.concatenate(axis=0))
1) 使用np.vstack()函数对数组a,b进行垂直组合.
np.vstack((a,b))
array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
2) 使用np.concatenate(axis=0)函数对数组a,b进行垂直组合.
np.concatenate((a,b),axis=0)
array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
3.深度组合:沿着纵轴方向组合(np.dstack())
1)使用np.dstack()函数对数组a,b进行深度组合。
np.dstack((a,b))
array([[[ 1, 2], [ 2, 4], [ 3, 6]], [[ 4, 8], [ 5, 10], [ 6, 12]], [[ 7, 14], [ 8, 16], [ 9, 18]]])
4.列组合column_stack():一维数组:按列方向组合,二维数组:同hstack一样
1)使用column_stack()函数对数组a,b进行列组合.
np.column_stack((a,b))
array([[ 1, 2, 3, 2, 4, 6], [ 4, 5, 6, 8, 10, 12], [ 7, 8, 9, 14, 16, 18]])
5.行组合row_stack():一维数组:按行方向组合,二维数组:和vstack一样
1)使用row_stack()函数对数组a,b进行行组合.
np.row_stack((a,b))
array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
4、数组分割
1.创建一个数组a,再将a每个值乘以2构成数组b,
a=np.array([[1,2,3],[4,5,6],[7,8,9]]) a
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b=a*2 b
array([[ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
2.水平分割
1) 使用hsplit()函数,以3对数组a进行水平分割.
np.hsplit(a,3)
[array([[1], [4], [7]]), array([[2], [5], [8]]), array([[3], [6], [9]])]
2) 调用split函数并指定参数axis=1,以3对数组a进行垂直分割
np.split(a,3,axis=1)
[array([[1], [4], [7]]), array([[2], [5], [8]]), array([[3], [6], [9]])]
3.垂直分割
1)使用vsplit()函数,以3对数组a进行垂直分割。
np.vsplit(a,3)
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
2)调用split函数并指定参数axis=0,以3对数组a进行垂直分割
np.split(a,3,axis=0)
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
4.使用tolist()函数将数组,转变成列表。
1)创建一个数组a,将数组a使用tolist函数转变成列表。
a=np.array([1,2,3]) a
array([1, 2, 3])
a.tolist()
[1, 2, 3]
5、通用函数
1.创建一维数组x,使用np.sin函数对x中所有元素求正弦值
x=np.arange(0,100,10,dtype=np.float64) a = np.sin(x) a
array([ 0. , -0.54402111, 0.91294525, -0.98803162, 0.74511316, -0.26237485, -0.30481062, 0.77389068, -0.99388865, 0.89399666])
2.创建二维数组b,使用np.cos函数对b数组中所有元素求余弦值
b=np.arange(1,10).reshape(3,3) b
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.cos(b)
array([[ 0.54030231, -0.41614684, -0.9899925 ], [-0.65364362, 0.28366219, 0.96017029], [ 0.75390225, -0.14550003, -0.91113026]])
3.使用np.round函数,对上面余弦结果数组元素进行四舍五入
np.round(_)
array([[ 1., -0., -1.], [-1., 0., 1.], [ 1., -0., -1.]])
4.使用numpy中的random.rand函数创建包含10个随机数的数组
x=np.random.rand(10)*10 x
array([2.2612299 , 7.20131365, 2.3055456 , 5.76279063, 4.11797351, 9.352511 , 7.26407455, 8.99025374, 0.01119493, 2.62834008])
5.使用np.floor函数对所有元素向下取整
np.floor(x)
array([2., 7., 2., 5., 4., 9., 7., 8., 0., 2.])
6.使用np.ceil函数对所有元素向上取整。
np.ceil(x)
array([ 3., 8., 3., 6., 5., 10., 8., 9., 1., 3.])
7.使用np.absolute函数对-3取绝对值运算
np.absolute(-3)
3
8.使用np.absolute函数,对3+4j模运算
np.absolute(3+4j)
5.0
9.使用isnan函数,判断是否为空
np.isnan(np.NAN)
True
10.使用np.log2函数对8进行对数运算
np.log2(8)
3.0
11.使用np.sqrt函数对range(10)进行平方根运算
np.sqrt(range(10))
array([0. , 1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
12.创建一个数组a,使用np.mean函数求数组a的均值
a=np.array([1,2,6,3,4,5,8]) np.mean(a)
4.142857142857143
13.使用np.average()函数,求range(1,5)的加权weights=range(4,0,-1)的平均值。
np.average(range(1,5),weights=range(4,0,-1))
2.0
14.创建一个数组a,使用np.var()函数,求数组a的方差值
a=np.array([1,2,6,3,4,5,8]) np.var(a)
4.979591836734693
15.创建一个数组a,使用np.std()函数,求数组a的标准差值
a=np.array([1,2,6,3,4,5,8]) np.std(a)
2.231499907401901
16.点积,创建两个数组a,b,计算两个数组的线性组合,一维上是对应元素相乘,多维可将a*b视为矩阵乘法
a=np.array((1,2,3)) a
array([1, 2, 3])
b=np.array((4,2,1)) b
array([4, 2, 1])
a.dot(b) #向量内积
11
np.dot(a,b)
11
17.创建一个二维数组c,c数组的每行与a数组计算内积。
c = np.array(([1,2,3],[4,5,6],[7,8,9])) c.dot(a)
array([14, 32, 50])
18.a数组与c数组的每列计算内积。
a.dot(c)
array([30, 36, 42])
Numpy中常用函数相关推荐
- Py之Numpy:Numpy库中常用函数的简介、应用之详细攻略
Py之Numpy:Numpy库中常用函数的简介.应用之详细攻略 目录 Numpy库中常用函数的简介.应用 1.X, Y = np.meshgrid(X, Y) 相关文章 Py之Numpy:Numpy库 ...
- python 函数作用于矩阵_图解NumPy:常用函数的内在机制
原标题:图解NumPy:常用函数的内在机制 来源: 机器之心 支持大量多维数组和矩阵运算的 NumPy 软件库是许多机器学习开发者和研究者的必备工具,本文将通过直观易懂的图示解析常用的 NumPy 功 ...
- Python使用numpy中trim_zeros函数去除首尾0值的语法
Python使用numpy中trim_zeros函数去除首尾0值的语法 目录 Python使用numpy中trim_zeros函数去除首尾0值的语法 #numpy中trim_zeros
- numpy中ravel函数、flatten函数的功能及差异
numpy中ravel函数.flatten函数的功能及差异 >>> import numpy as np >>> a = np.arange(20).reshape ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- numpy中where函数的用法
numpy中where函数的用法 numpy.where(condition,x,y)--若满足condition,输出x,否则输出y. 举例: 例1:一维数组 >>> a = np ...
- oracle中各种函数,oracle中常用函数大全
1.数值型常用函数 函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 s ...
- concat函数_三、P57-61 MySQL中常用函数
本部分主要讲解MySQL数据库中常用函数的使用. P57 SQL中的函数类型:字符串函数.数值函数.日期和时间函数.流程函数.其他常用函数: P58 第1部分:字符串函数 1.concat函数 con ...
- python sum函数numpy_解决Numpy中sum函数求和结果维度的问题
使用Numpy(下面简称np)中的sum函数对某一维度求和时,由于该维度会在求和后变成一个数,所以所得结果的这一维度为空. 比如下面的例子: a = np.array([[1,2,3],[4,5,6] ...
- 计算机应用常用的30个函数,Excel中常用函数的使用
ISSN 1009-30" 咖船r Kno别b内e and伯叻肋叻电奠知识'i技术 V01.6,No.30,October20lO,pP.8523-8524E-mail:x8jl@cccc. ...
最新文章
- gpu云服务器运行游戏_在滴滴云 GPU 服务器上使用NVIDIA NGX环境搭建
- ARWU、THE、QS世界大学 排名前100名国(境)外高校名单
- alpine运行程序提示not found
- 差异备份、增量备份、完全备份的区别
- CentOS 7 上安装 redis3.2.3安装与配置
- 使用objectdatasource结合数据绑定控件进行简单三层架构的开发
- php打开文件读写函数,php中常用文件操作读写函数介绍
- 用户与组管理,磁盘管理
- C++ 空类,默认产生哪些成员函数
- python模拟浏览器下载文件在哪里_python下selenium模拟浏览器基础操作
- 数学分析闭区间套定理_不能精确找到背驰点?利用区间套解决这难题
- js node 打包mac应用_node app 打包工具pkg的具体使用
- 解决谷歌浏览器添加插件时显示程序包无效:“CRX_HEADER_INVALID“
- 数说故事携手香港城市大学发表顶级国际论文,并获权威「IEEE TCSS期刊」收录
- mac多屏幕切换快捷键
- 全国大学生数学建模竞赛、美赛研究生数学建模优秀论文分享
- 直接管理和维护计算机系统的程序称为,全国2008年4月自考计算机原理试题
- 电信系统服务器地址,电信高速dns服务器地址谁知道?
- /var/tmp/rpm-tmp. 安装失败时找不到tmp文件的应对方法
- 算法训练Day24 | 回溯算法理论基础;LeetCode77.组合(经典的回溯问题)
热门文章
- how to write a good api
- EXTJS学习笔记:grid之分组实现groupingview
- SQL--取得子部门的存储过程
- 算法与数据结构 第1章 当我们谈论算法的时候,我们在谈论什么?
- 190712每日一句 生命的韧性
- CHI 2016 2017 Paper Shared Gaze for Remote Collaboration
- Atitit maven配置pom文件 配置法v2 t33 目录 1. Maven打包war原理	1 1.1. 在target目录生成war包ori目录。。。里面就是所有的资源	1 1.2. 去掉
- Atitit 研发体系 之道 attilax著 艾龙著 1. 发管理是一个完整的管理体系,从结构上来讲,它主要由四个方面的内容构架而成:组织结构与岗位设置 管理流程与工作流程、、项目及管道管理(
- Atitit.编译原理与概论
- 大平台时代到来 基金电商寻求突围