本文目录一览:
python基础之numpy.reshape详解
这个方法是在不改变数据内容的情况下,改变一个数组的格式,参数及返回值,官网介绍:
a:数组--需要处理的数据
newshape:新的格式--整数或整数数组,如(2,3)表示2行3列,新的形状应该与原来的形状兼容,即行数和列数相乘后等于a中元素的数量
order:
首先做出翻译: 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参数效果。
通过例子可以看出来,F是优先对列信息进行操作,而C是优先行信息操作。如果未对r的格式进行设置,那么我们rashape的时候以“A”的顺序进行order的话,它的效果和“C”相同。
3、我们将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与pytorch不同,numpy的max()只有一个返回值:
也就是说,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.argmax和np.argmin.
1、numpy.tofile()和numpy.fromfile()
保存为二进制格式,但是不保存数组形状和数据类型, 即都压缩为一维的数组,需要自己记录数据的形状,读取的时候再reshape.
2、numpy.save() 和 numpy.load()
保存为二进制格式,保存数组形状和数据类型, 不需要进行reshape
实例:
3、numpy.savetxt()和numpy.loadtxt()
np.savetxt(fname,array,fmt=’%.18e’,delimiter=None)
Parameter解释:
array:待存入文件的数组。
fmt:写入文件的格式
实例: