热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:ndarray对象的使用方法

本文由编程笔记#小编为大家整理,主要介绍了ndarray对象的使用方法相关的知识,希望对你有一定的参考价值。ndarray的基本操作1.索引
本文由编程笔记#小编为大家整理,主要介绍了ndarray对象的使用方法相关的知识,希望对你有一定的参考价值。



ndarray的基本操作

1.索引


基本索引:一维与list完全一致 多维同理


例如:
import numpy
ndarr1
= numpy.random.randint(0,10.size=5)
ndarr1[0] # 取数组中的第一个值, 以此类推
ndarr1[
1]
ndarr1[
-1]


高级索引:整数数组形式的索引


例如:
nd
= np.random.randint(0,10,size=(5,6))
nd
array([[0,
4, 7, 5, 9, 7],
[
5, 3, 2, 9, 5, 5],
[
9, 2, 6, 2, 7, 7],
[0,
3, 5, 4, 3, 9],
[
9, 1, 9, 7, 1, 3]])
nd[0][0]
# 普通的索引
#
整数数组索引
nd[0,0]
nd[
-1,0]
nd[
-1,]
# 往里一个维度 要同时 取出 0 2 4
nd[-1,[0,2,4]]
nd[
-1,[4,2,0]] # 顺序任意 可以正向取 也可以反向取 还可以随便取 而且可以重复取
nd[-1,[2,4,0]]
nd[
-1,[2,4,0,0,0,0]]


2.切片

一维与列表切片完全一致 多维时同理


例如:
ndarr
= np.random.randint(0,10,size=5)
ndarr
array([
8, 6, 5, 3, 6])
ndarr[
1:4]
ndarr[0:
4]
ndarr[:
4]
ndarr[:]

而且ndarray还支持用,一级一级往里找


ndarr[:2]
# 切片也是 从外往里 一级一级切
ndarr[:,0:2]
ndarr[
1:3,1:4]
ndarr[
1:3,1:-1]

使用两个:: 的形式 进行切片和翻转


例如:
nd
= np.random.randint(0,10,size=9)
nd
array([0, 0,
4, 9, 0, 3, 8, 6, 5])
nd[
1:-1:2] # start:stop:step
nd[::-1]
nd[::
-2]


3.变形

使用reshape函数,注意参数是一个tuple!


nd = np.random.randint(0,10,size=(4,5))
nd
array([[
2, 5, 0, 9, 6],
[0,
1, 3, 3, 8],
[
5, 3, 9, 7, 8],
[
6, 0, 9, 8, 8]])
nd.size
20
nd.reshape((
5,4)) # 形状可以任意改变 但是size不能变化
nd.reshape((10,2))
nd.reshape((
2,10))
# nd.reshape((5,5)) # 25
nd.reshape((20,1))
nd.reshape((
-1,1)) # -1指的是自动计算的意思
nd.reshape((1,20))
nd.reshape((
1,-1))


4.连结

np.concatenate()

连结需要注意的点:



  • 连结的参数是列表:一定要加小括号

  • 必须 维度相同 形状相符

  • 连结的方向默认是shape这个tuple的第一个值所代表的维度方向

  • 可通过axis参数改变连结的方向 


# 第一个参数 以元组的形式 传入要拼接的多个ndarr
np.concatenate((nd,nd)) # 默认按照纵向拼接
#
第二个参数 axis 用来指定 拼接方向
#
np.concatenate((nd,nd),axis=0)
#
np.concatenate((nd,nd),axis=1)
#
np.concatenate((nd,nd),axis=-1) # -1是最里层
np.concatenate((nd,nd),axis=-2) #


5.切分

与级联类似,三个函数完成切分工作:



  • np.split 默认是axis=0

  • np.vsplit 横向切 与axis=0相同

  • np.hsplit 纵向切 与axis=1相同

  • 返回值是一个列表


# ary, indices_or_sections, axis=0
#
ary 要切分的数组
#
indices_or_sections 用来指定 分成几份 或者 从哪里分
#
axis 用来指定切分的方向
np.split()


6.副本

所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象操作也会影响原数组。

可使用copy()函数创建副本,类似于python中的deepcopy


# 对于ndarray对象 凡是涉及到复制后改变 又不希望影响原数组的 都用copy (这是最保险的)
nd2 = nd.copy() # 深层copy


ndarray的聚合操作

1.求和numpy.sum()


2. 最大最小值:numpy.max/ np.min


3. 其他聚合操作


Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements 所有元素的和
np.prod np.nanprod Compute product of elements 所有元素的乘积
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.any N
/A Evaluate whether any elements are true
np.all N
/A Evaluate whether all elements are true


ndarray的矩阵操作

1.基本矩阵操作

1) 算术运算符:



  • 加减乘除

    ndarr = np.random.randint(0,10,size=(4,5))
    ndarr
    array([[
    4, 5, 8, 3, 0],
    [
    9, 4, 4, 1, 5],
    [
    9, 6, 4, 0, 1],
    [
    6, 1, 6, 4, 9]])
    ndarr
    +1 ...
    ndarr
    -1 ...
    ndarr
    *2
    array([[
    8, 10, 16, 6, 0],
    [
    18, 8, 8, 2, 10],
    [
    18, 12, 8, 0, 2],
    [
    12, 2, 12, 8, 18]])



2) 矩阵积np.dot()


ndarr
array([[
4, 5, 8, 3, 0],
[
9, 4, 4, 1, 5],
[
9, 6, 4, 0, 1],
[
6, 1, 6, 4, 9]])
# 矩阵的点积
#
A矩阵 和 B矩阵 做点积
#
A矩阵是m行n列的矩阵
#
B矩阵是i行j列的矩阵
#
B的行数必须得等于A的列数 i要等于n
#
结果是一个 m行 j列的一个矩阵
ndarr2 = np.random.randint(0,10,size=(5,2))
ndarr2
array([[
4, 4],
[0,
9],
[0,
8],
[
1, 5],
[
6, 2]])
np.dot(ndarr,ndarr2)

array([[ 19, 140],
[ 67, 119],
[ 42, 124],
[ 82, 119]])


2.广播机制

技术分享图片

技术分享图片


ndarray的排序

1.快速排序

np.sort()与ndarray.sort()都可以,但有区别:



  • np.sort(ndarray) 不改变输入

  • ndarray.sort() 本地处理,不占用空间,但改变输入


2.部分排序

np.partition(a,k)

有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。



  • 当k为正时,我们想要得到最小的k个数

  • 当k为负时,我们想要得到最大的k个数


示例:
nd
= np.random.randint(0,100,size=15)
ndarr
= np.random.randint(0,100,size=15)
ndarr
array([
83, 57, 43, 83, 95, 73, 95, 7, 46, 26, 86, 47, 59, 45, 64])
# 10个数据库 里面分别有10000商品
#
计算销量最大的前三个
#
a, kth a是要排序的数组 kth是要找最大的几个
#
np.partition(ndarr,3) # k是3 表示寻找 最小的3个
#
np.partition(ndarr,5) # 顺序可能是没有排好的 但是最前面的5个一定是最小的5个
np.partition(ndarr,-5)
np.partition(ndarr,
-4)
array([
46, 7, 43, 45, 59, 47, 26, 57, 64, 73, 83, 83, 95, 86, 95])

 





推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • Python的参数解析argparse模块的学习
    本文介绍了Python中参数解析的重要模块argparse的学习内容。包括位置参数和可选参数的定义和使用方式,以及add_argument()函数的详细参数关键字解释。同时还介绍了命令行参数的操作和可接受数量的设置,其中包括整数类型的参数。通过学习本文内容,可以更好地理解和使用argparse模块进行参数解析。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
author-avatar
无声无息无心跳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有