热门标签 | 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])

 





推荐阅读
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
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社区 版权所有