python中numpy讲解(numpy csdn)

发布时间:2022-11-16

本文目录一览:

  1. python基础之numpy.reshape详解
  2. (Python)numpy 常用操作
  3. 图解Python中数据分析工具包:Numpy

python基础之numpy.reshape详解

这个方法是在不改变数据内容的情况下,改变一个数组的格式,参数及返回值,官网介绍:

  • a:数组--需要处理的数据
  • newshape:新的格式--整数或整数数组,如(2,3)表示2行3列,新的形状应该与原来的形状兼容,即行数和列数相乘后等于a中元素的数量
  • order:可选范围为{'C', 'F', 'A'}。使用索引顺序读取a的元素,并按照索引顺序将元素放到变换后的的数组中。如果不进行order参数的设置,默认参数为C。
    1. "C":指的是用类C写的读/索引顺序的元素,最后一个维度变化最快,第一个维度变化最慢。以二维数组为例,简单来讲就是横着读,横着写,优先读/写一行。
    2. "F":是指用FORTRAN类索引顺序读/写元素,最后一个维度变化最慢,第一个维度变化最快。竖着读,竖着写,优先读/写一列。注意,"C"和"F"选项不考虑底层数组的内存布局,只引用索引的顺序。
    3. "A":选项所生成的数组的效果与原数组a的数据存储方式有关,如果数据是按照FORTRAN存储的话,它的生成效果与"F"相同,否则与"C"相同。这里可能听起来有点模糊,下面会给出示例。

二、示例解释

  1. 首先随机生成一个4行3列的数组
  2. 使用reshape,这里有两种使用方法,可以使用np.reshape(r,(-1,1),order='F'),也可以使用r1=r.reshape((-1,1),order='F'),这里我选择使用第二种方法。通过示例可以观察不同的order参数效果。
  3. 通过例子可以看出来,F是优先对列信息进行操作,而C是优先行信息操作。如果未对r的格式进行设置,那么reshape的时候以"A"的顺序进行order的话,它的效果和"C"相同。
  4. 将r的存储方式进行修改,修改为类Fortan的方式进行存储。并做与第2步类似的操作。

基础操作样例:

  1. 引入numpy,名称为np
  2. 接下来创建一个数组a,可以看到这是一个一维的数组
  3. 使用reshape()方法来更改数组的形状,可以看到数组d成为了一个二维数组
  4. 通过reshape生成的新数组和原始数组公用一个内存,也就是说,假如更改一个数组的元素,另一个数组也将发生改变
  5. 同理还可以得到一个三维数组

reshape(-1,1)什么意思:

大意是说,数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出出数组的另外一个shape属性值。

举例:

同理,只给定行数,newshape等于-1,Numpy也可以自动计算出新数组的列数。

(Python)numpy 常用操作

不放回取样: 从列表ori中不放回地取n个数 通过这种操作,我们可以获得一个二维列表的子集: (如果这个二维列表是图的邻接矩阵,那么就是对图进行随机采样,获得一个图的子图) 首先要注意,"+" 操作对于list和numpy.array是完全不同的

  • python 中的list,"+"代表拼接
  • 在numpy.array中,"+"代表矩阵相加 keepdim指的是维度不变,常在sum中使用。如: 会发现,keepdim之后还是二维的 这里要注意,pytorch和numpy里max()函数的返回值是不同的
  • pytorch: 也就是说,max(1)代表求第一维的最大值,对于二维数组来说,就是求纵向的最大值,然后,第一个返回值是最大值所形成数组,第二个返回值是最大值所在的索引。这一个技巧在机器学习的分类任务中很常用,比如我们的分类任务是把数据分成m类,那么最终我们模型的输出是m维的,对于n个样本就是n*m,如果要判断我们的模型最终的分类结果,就是找n个样本里,每个样本m维输出的最大值索引,代表样本是这个类的可能性最大。我们可以方便地用这种方式找到最大值的索引: 其中test_out是模型输出,predict_y则是分类结果
  • numpy: 也就是说,numpy.max()不会返回最大值所在的索引

图解Python中数据分析工具包:Numpy

numpy是我学习python遇到的第一个第三方工具包,它可以让我们快速上手数据分析。numpy提供了向量和矩阵计算和处理的大部分接口。目前很多python的基础工具包都是基于numpy开发而来,比如 scikit-learn, SciPy, pandas, 还有 tensorflow。 numpy可以处理表格、图像、文本等数据,极大地方便我们处理和分析数据。本文主要内容来自于Jay Alammar的一篇文章以及自己学习记录。

原文地址:

使用过程中,如果希望 Numpy 能创建并初始化数组的值, Numpy 提供了 ones()zeros()random.random() 等方法。只需传递希望生成的元素数量(大小)即可: 还可以进行如下操作: 一般,需要数组和单个数字之间也可以进行运算操作(即向量和标量之间的运算)。比如说 data * 1.6,numpy利用一个叫做广播机制(broadcasting)的概念实现了这一运算。 我们可以通过索引对numpy数据获取任意位置数据或者对数据切片 我们可以通过numpy自带的函数对数据进行一些想要的聚合计算,比如min、max 和 sum ,还可以使用 mean 得到平均值,使用 prod 得到所有元素的乘积,使用 std 得到标准差等等。 上述操作不仅可以应用于单维度数据,还可以用于多维度数据(矩阵)。 同样可以使用ones()zeros()random.random()创建矩阵,只要写入一个描述矩阵维数的元组即可: numpy还可以处理更高维度的数据: 创建更高维度数据只需要在创建时,在参数中增加一个维度值即可: 根据数组中数值是否满足条件,输出为True或False。 希望得到满足条件的索引,用np.where函数实现。 根据索引得到对应位置的值。 np.where也可以接受另两个可选择的参数a和b。当条件满足时,输出a,反之输出b。 获取数组最大值和最小值的索引可以使用np.argmaxnp.argmin

保存和读取数据的方法:

  1. numpy.tofile()和numpy.fromfile() 保存为二进制格式,但是不保存数组形状和数据类型,即都压缩为一维的数组,需要自己记录数据的形状,读取的时候再reshape。
  2. numpy.save() 和 numpy.load() 保存为二进制格式,保存数组形状和数据类型,不需要进行reshape

实例:

  1. numpy.savetxt()和numpy.loadtxt() np.savetxt(fname,array,fmt='%.18e',delimiter=None) 参数解释:
    • array:待存入文件的数组。
    • fmt:写入文件的格式

实例: