【Python学习日志】 - Numpy包

NumPy是什么?

使用Python进行科学计算的基础包,在数据分析的时候比较常用到矩阵计算。这时太多的Np属性不记得,所以方便自己使用把一些常用的Np属性汇总记录一下使用的时候方便查找。

ndarray.ndim
阵列的轴数(尺寸)。
ndarray.shape
数组的大小。这是一个整数元组,表示每个维度中数组的大小。对于具有n行和m列的矩阵,shape将是(n,m)。shape因此,元组的长度 是轴的数量ndim。
ndarray.size
数组的元素总数。这相当于元素的乘积shape。
ndarray.dtype
描述数组中元素类型的对象。可以使用标准Python类型创建或指定dtype。此外,NumPy还提供自己的类型。numpy.int32,numpy.int16和numpy.float64就是一些例子。
ndarray.itemsize
数组中每个元素的大小(以字节为单位)。例如,类型的元素数组float64有itemsize8(= 64/8),而其中一个类型complex32有itemsize4(= 32/8)。它相当于ndarray.dtype.itemsize。
ndarray.data
包含数组实际元素的缓冲区。通常,我们不需要使用此属性,因为我们将使用索引工具访问数组中的元素

 

 

杂乱的知识?

查看一个函数的帮助文档,可以直接在文件里输入代码:  help(np.add)

或者在命令行中输入:np.info(np.add)

查看包的版本号信息,可以直接输出:    np.__version__

用zero函数创建数组,默认单元大小是八个字节(也就是默认double?)

import numpy as np
A = np.zeros(4)
print(A.itemsize)
print(A.itemsize*A.size)输出:
8
32

注意数组起始下标是从0开始的。

关于arange和reshape函数:

import numpy as np
A = np.arange(8).reshape(2,4)
print(A)输出:
[[0 1 2 3][4 5 6 7]]

关于返回非零元素的下标的一系列骚操作:

import numpy as np
A = np.arange(8).reshape(2,4)
A=A+1
A[0][1]=0
print(A)
print(np.nonzero(A))输出:
[[1 0 3 4][5 6 7 8]]
(array([0, 0, 0, 1, 1, 1, 1], dtype=int64), array([0, 2, 3, 0, 1, 2, 3], dtype=int64))

 其中返回的两个参数,一个是第一维的下标,一个是第二维的下标。

关于eye函数,random函数,以及变量性质的测试

B = np.eye(2)
print(B)
print(B.size)
print(B[0][1])
B=np.random.random((3,2))
print(B)
B="hello"
print(B)输出:
[[1. 0.][0. 1.]]
4
0.0
[[0.29490288 0.14067274][0.96161076 0.92929841][0.26694438 0.40938209]]
hello

由此可见,相同都变量名是可以在不同时刻代替不同东西的。

但是不能对这个变量的其中一部分进行代替操作:(下面的函数中,只运行前两行是没有问题的)

程序1:
qqweqeqweqq = np.zeros(12)
for i in range(10):qqweqeqweqq[i]=np.zeros(12)Error:
ValueError: setting an array element with a sequence.
----------------------------------------------------------------------------------
程序2:
qqweqeqweqq = np.zeros((10,2))
for i in range(10):qqweqeqweqq[i]=np.zeros(12)Error:
ValueError: could not broadcast input array from shape (12) into shape (2)

但是这样是没有问题的:

qqweqeqweqq = np.zeros((10,2))
qqweqeqweqq = np.zeros(12)

疑问:sequence,array,list,dic,都有啥区别? 

sum函数,max函数,min函数,mean函数

B=np.random.random((3,2))
print(B)
print(B.max(),B.min(),B.mean())输出:
[[0.89882712 0.77860196][0.7093924  0.15120126][0.99924821 0.91765126]]
0.9992482107724574 0.15120126168466463 0.7424870345505307

 对应的,可以添加参数axis=0代表在第0维上进行合并

进一步体验random函数

np1.random.rand(0-1之间的的随机数生成)\randn(服从正态分布的随机数生成)\randint(随机整数的生成)\choice([])(随机数产生的范围自定义)\......(其他随机数类型),举例如下:(图片源自链接)

体验索引下标区别:

B=np.arange(25).reshape((5,5))
print(B)
print(B[1:-1,1:-1])
print(B[1:-1])
print(B[1:-1][1:-1])输出:
[[ 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]]
[[ 6  7  8][11 12 13][16 17 18]]
[[ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]]

int,float,str之间的类型转换:

    num2 = "123";num2 = int(num1);print("num2: %d" % num2);'''输出  num2: 123'''num1 = "123.12";num2 = float(num1);print("num2: %f" % num2);'''num2: 123.120000'''num = 123;mystr = str(num);print ("%s" % mystr);''' 输出 123   '''

其他小测试:(关于numpy的sum函数)

range(2,4)
Out[141]: range(2, 4)np.sum(range(4))
Out[142]: 6qqqq=range(4)qqqq
Out[144]: range(0, 4)type(qqqq)
Out[145]: rangenp.sum(range(10,12))
Out[146]: 21

 

numpy包中,还有一个非常实用的玩意:矩阵操作。

创建一个矩阵,可以使用函数np,mat(...),参数可以是一个list或者是一个narray。

你想构建一个2*3的全1矩阵,则只需要:

A=np.mat(np.ones(6).reshape(2,3))

即可。

现在假设A是个矩阵,那么:

求矩阵的逆:A.I         或者:np.linalg.inv(A)

求矩阵的转置:A.T     或者:  A.linalg.transpose()

求矩阵的行列式:np.linalg.det(A)

求矩阵的特征值和特征向量:np.linalg.eig(np1)

矩阵的点乘:np.linalg.dot(A,B)

求线性方程组的解:
首先写出方程组的右边的y值向量:y=np.array([[y1],[y2],[y3]...])
函数值的集合等于 x=np.linalg.solve(A,y)

 

但是要注意np.mat()和np.matrix()的区别:后者是完全复制,前者是当参数是矩阵的时候是直接引用的。

关于数据保存

 

Numpy提供了几种数据保存的方法。

   以3*4数组a为例:

    1. a.tofile("filename.bin")

      这种方法只能保存为二进制文件,且不能保存当前数据的行列信息,文件后缀不一定非要是bin,也可以为txt,但不影响保存格式,都是二进制。

      这种保存方法对数据读取有要求,需要手动指定读出来的数据的的dtype,如果指定的格式与保存时的不一致,则读出来的就是错误的数据。

       b = numpy.fromfile("filename.bin",dtype = **)

       读出来的数据是一维数组,需要利用

        b.shape = 3,4重新指定维数。

    2.numpy.save("filename.npy",a)

       利用这种方法,保存文件的后缀名字一定会被置为.npy,这种格式最好只用

       numpy.load("filename")来读取。

   3.numpy.savetxt("filename.txt",a)

      b =  numpy.loadtxt("filename.txt")

     用于处理一维和二维数组

 

两个数组的拼接:

np.concatenate((list1,list2),axis=0):矩阵之间的拼接

axis=0,代表在行方向上拼接(竖着接到后面)

axis=1,代表在列方向上拼接(横着接到后面)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解协同感知数据集OPV2V: An Open Benchmark Dataset and Fusion Pipeline for Perception with V2V Communication

在《详解自动驾驶仿真框架OpenCDA: An Open Cooperative Driving Automation Framework Integrated with Co-Simulation》 一文中介绍了自动驾驶仿真框架 OpenCDA。本文将介绍论文作者另一篇最新工作 OPV2V,论文收录于 ICRA2022。 OPV2V 数据集主要 feature 有&…

【Python学习】 - 如何在Spyder中弹出plot绘图窗口而不是在Console中绘图

依次选择这几项: 点击ok确认。 注意:点击ok之后不会立即生效,重启Spyder之后才会生效

mysql系列:加深对脏读、脏写、可重复读、幻读的理解

关于相关术语的专业解释,请自行百度了解,本文皆本人自己结合参考书和自己的理解所做的阐述,如有不严谨之处,还请多多指教。 **不可重复读的重点是修改: **同一事务,两次读取到的数据不一样。 幻读的重点在于新增或者…

重读经典(点云深度学习开山之作):《Deep learning on point clouds for 3D scene understanding》(持续更新中)

本文介绍的是 PointNet 作者的博士论文:3D场景理解中的点云深度学习。从上图可以看到,整个博士论文主要贡献有两块:一是点云深度学习的网络架构(PointNet 和 PointNet);二是在3D场景理解中的应用&#xff0…

Coursera自动驾驶课程第17讲:An Autonomous Vehicle State Estimator

在第16讲《Coursera自动驾驶课程第16讲:LIDAR Sensing》我们学习了自动驾驶目前常用的3D 传感器,激光雷达,了解了激光雷达的工作原理,掌握了对点云数据的操作以及如何使用点云配准方法来进行汽车定位。 回顾一下,在本…

!何为脏读、不可重复读、幻读

2.0、前言 事务的隔离性是指多个事务并发执行的时候相互之间不受到彼此的干扰的特性,隔离性是事务ACID特性中的I,根据隔离程度从低到高分为Read Uncommitted(读未提交),Read Committed(读已提交&#xff0…

【转】JPA、Hibernate和Mybatis区别和总结

很多人都用过java的数据库连接池C3P0,但官方没有说明名称的由来。 据传闻:连接池作者是《星球大战》迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool的单词字母。因此叫这个名字(根据网友提醒&…

详解3D物体检测模型: Voxel Transformer for 3D Object Detection

本文介绍一个新的的3D物体检测模型:VoTr,论文已收录于ICCV 2021。 这是第一篇使用 voxel-based Transformer 做3D 主干网络,用于点云数据3D物体检测。由于有限的感受野,传统的 3D 卷积网络检测器(voxel-based&#xff…

一步步编写操作系统 65 标准调用约定stdcall 汇编实战

因为c语言遵循的调用约定是cdecl,咱们也自然要遵守cdecl约定了。不过为了起到对比的作用,除了介绍cdecl外,也会介绍下stdcall。 既然咱们用的是调用约定是cdecl,那对它的介绍最好让它离下一节的内容近一些,所以先说一…

Coursera自动驾驶课程第18讲:The Planning Problem

在第17讲《Coursera自动驾驶课程第17讲:An Autonomous Vehicle State Estimator》 我们学习了如何使用多传感器融合进行自车定位,以及传感器的内外参标定和时间同步,我们还讨论了在实际应用中常遇到的问题。 从本讲开始我们将学习一个新的模…

详解3D物体检测模型:Focal Sparse Convolutional Networks for 3D Object Detection

用于3D目标检测的焦点稀疏卷积神经网络【CVPR2022】【3D检测】本文介绍一篇新的 3D 物体检测模型:Focals Conv,论文收录于 CVPR2022。在 3D 检测任务中,点云或体素数据不均匀地分布在3维空间中,不同位置的数据对物体检测的贡献是不…

地平线:面向规模化量产的自动驾驶感知研发与实践

导读 4月27日,地平线智能驾驶感知研发部负责人苏治中就 《面向规模化量产的自动驾驶感知研发与实践》 这一主题进行了直播讲解。 本次课程内容分为4个部分: 1、地平线自动驾驶环境感知量产实践 2、软硬协同的自动驾驶感知算法设计 3、实现规模化量产的“…

Power BI与Power Query、Power Pivot 是什么关系?

搞不清楚Power BI与Power Query、Power Pivot是什么关系?看这篇文章就够了。 刚开始学习PowerBI的时候,总是能碰到Power Query和Power Pivot这两个词(下文简称为PQ和PP),现在中文里面学习PowerBI的资源本来就不是很多&#xff0c…

地平线:上帝视角与想象力——自动驾驶感知的新范式

导读 3月28日,在「地平线自动驾驶技术专场」上,地平线自动驾驶系统架构师刘景初博士围绕《上帝视角与想象力——自动驾驶感知的新范式 》这一主题进行了直播讲解。 本次课程主要分为以下4个部分: 1、自动驾驶结构演化提出算法新需求 2、软件2…

详解Class类文件的结构(上)

前言 相信搞Java开发的同学都经常会接触到Class类文件,了解了JVM虚拟机之后也会大量接触到class字节码,那么它到底是什么样的文件?内部由什么构成?虚拟机又是如何去识别它的?这篇文章就来学习一下Class类文件的结构。…

Coursera自动驾驶课程第19讲:Mapping for Planning

在第18讲 《Coursera自动驾驶课程第18讲:The Planning Problem》 我们对自动驾驶中的规划问题有了一个全面的了解,理解了规划问题中的约束和目标;同时我们还讨论了如何分层如解决规划问题(任务规划、行为规划、路径规划和速度曲线…

详解Class类文件的结构(下)

本文继续使用上次的Test.class文件,它是由下面单独的一个类文件编译而成的,没有包。 6. 索引(Index) 索引又分类索引、父类索引和接口索引集合,类索引(this_class)和父类索引(super…

自动驾驶开源软件和算法库

1. Carla(自动驾驶开源仿真软件) github:https://github.com/carla-simulator/carladoc:https://carla.readthedocs.io/en/latest/website:http://carla.org/Bounding boxes:https://carla.readthedocs.io/…

Coursera自动驾驶课程第20讲:Mission Planning in Driving Environments

在第19讲《Coursera自动驾驶课程第19讲:Mapping for Planning》 我们学习了自动驾驶中两种环境建图方法:占用网格图(occupancy grid map) 和 高清地图(high-definition road map)。 在本讲中,我…

Java实例化对象过程中的内存分配

问题引入 这里先定义一个很不标准的“书”类,这里为了方便演示就不对类的属性进行封装了。 class Book{String name; //书名double price; //价格public void getInfo(){System.out.println("name:"name";price:"price);} } 在这个类中定义了两个属…