1. 首页
  2. 综合百科
  3. npy是什么意思(如果你不懂Numpy的话)

npy是什么意思(如果你不懂Numpy的话)

简介:关于npy是什么意思(如果你不懂Numpy的话)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

作者|天元浪子

来源|CSDN博客

0.简介大概七八年前,我用pyOpenGL绘制了一个地球磁层顶部的三维模型,这个代码现在还在某科研机构运行。在此之前,我一直觉得自己是一个有(你)格的python程序员,似乎无所不能。但是磁层顶模的显示效果让我很压抑。虽然这个模型只有几十万个顶点,但是拖动和缩放是非常困难的。最后我把顶点数削减到2万左右,为了兼顾模型质量和响应速度,最后勉强交付了这个任务。从此我开始怀疑python的性能,甚至怀疑python是否还是我的首选工具。

还好后来遇到了神器numpy。Numpy是python科学计算的基础软件包,提供多维数组对象,各种派生对象(掩膜数组,矩阵等。)以及快速数组运算的函数和API,包括数学、逻辑、数组形状变换、排序、选择、I/O、离散傅立叶变换、基本线性代数、基本统计运算、随机模拟等等。

了解了numpy之后,我才知道磁层顶部的3D模型之所以慢,是因为用list(python array)存储数据,而不是ndarray(numpy array)。有了numpy,python程序员就有可能写出能以C语言速度运行的代码。熟悉numpy,可以学习使用pyo pengl/pyo pencv/panda/mapplotlib等数据处理和可视化模块。

事实上,numpy的数据组织结构,尤其是数组(numpy.ndarray)几乎已经成为所有数据处理和可视化模块的标准数据结构(类似python几乎已经成为机器学习领域的首选工具语言)。越来越多基于python的科学和数学软件包使用numpy数组。虽然这些工具通常支持python的原生数组作为参数,但它们仍然会在处理之前将输入数组转换为numpy数组,并且通常将它们输出为numpy数组。Numpy在python圈子里变得越来越重要和普遍。换句话说,为了高效地使用基于python的科学/数学工具(大多数科学计算工具),您只知道如何使用python的原生数组类型是不够的,还需要知道如何使用numpy数组。

总结:在这个AI和ML霸屏的时代,如果不懂numpy,请别说自己是python程序员。

1.1.listVSndarraynumpy的核心是ndarray对象(numpy array),它封装了python的原生N维数组(python array),数据类型相同。numpy数组和python数组之间有几个重要的区别:

一旦创建了numpy数组,它的元素数量就不能更改。添加或删除ndarray元素意味着创建一个新数组并删除原始数组。python数组的元素可以动态增减。

numpy数组中的元素需要具有相同的数据类型,因此它们在内存中具有相同的大小。Python数组没有这个要求。

Numpy数组方法涵盖了大量的数学运算和复杂运算,很多方法在最外层的numpy命名空间都有对应的映射函数。相比python数组,numpy数组的方法功能更强大,执行效率更高,代码更简单。

但是,上述差异并不能真正体现ndarray的优势。ndarray的本质在于numpy的两个特性:向量化和广播。矢量化可以理解为没有显式的循环、索引等。在代码中,广播可以理解为对每个元素进行隐式操作。矢量化和广播理解起来有点抽象,举个栗子来说明一下。

* *例**a和B是两个等长的整数数组,求A和B对应元素的乘积形成的数组。

1.使用python数组实现:

c=列表

foriinrange(透镜(a)):

附加(a[i]*b[i])

2.使用numpy数组实现:

栗子c=a*b是否体现了矢量化和广播的强大威力?请仔细体验!

总结:

矢量化代码更简单,更容易阅读。

更少的代码行通常意味着更少的错误。

代码更接近标准的数学符号。

矢量化代码更加pythonic化

2.dtypeANDshape孔子说:要找一个对象,先要了解其性格,要学习对象,先要了解其属性。ndarray对象有许多属性,如下表所示。

基于以下三个原因,我认为dtype和shape是ndarray最重要的两个属性,重要到其他属性几乎可以忽略。

我们参观过的坑几乎都是用dtype挖的。

我们几乎所有的困惑都是因为形状和我们预想的不一样。

我们的很多工作都在改变形状。

Ndarray.astype可以修改元素类型,ndarray.reshape可以重新定义数组的结构,这两个方法的重要性以及它们对应的属性。

一样。记住这两个属性和对应的两个方法,就算是登堂入室了。想了解numpy支持的元素类型,请点击《数学建模三剑客MSN》

3.创建数组(1)创建简单数组

numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)

numpy.empty(shape,dtype=float,order='C')

numpy.zeros(shape,dtype=float,order='C')

numpy.ones(shape,dtype=float,order='C')

numpy.eye(N,M=None,k=0,dtype=float,order='C')

应用示例:

>>>importnumpyasnp

>>>>np.array([1,2,3])

array([1,2,3])

>>>np.empty((2,3))

array([[2.12199579e-314,6.36598737e-314,1.06099790e-313],

[1.48539705e-313,1.90979621e-313,2.33419537e-313]])

>>>np.zeros(2)

array([0.,0.])

>>>np.ones(2)

array([1.,1.])

>>>np.eye(3)

array([[1.,0.,0.],

[0.,1.,0.],

[0.,0.,1.]])

(2)创建随机数组

numpy.random.random(size=None)

numpy.random.randint(low,high=None,size=None,dtype='l')

应用示例:

>>>np.random.random(3)

array([0.29334156,0.45858765,0.99297047])

>>>np.random.randint(2,size=10)

array([1,0,0,0,1,1,0,0,1,0])

>>>np.random.randint(5,size=(2,4))

array([[4,0,2,1],

[3,2,2,0]])

>>>np.random.randint(3,10,(2,4))

array([[4,8,9,6],

[7,7,7,9]])


(3)在数值范围内创建数组

numpy.arange(start,stop,step,dtype=None)

numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

numpy.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)

应用示例:

>>>np.arange(5)

array([0,1,2,3,4])

>>>np.arange(0,5,2)

array([0,2,4])

>>>np.linspace(0,5,5)

array([0.,1.25,2.5,3.75,5.])

>>>np.linspace(0,5,5,endpoint=False)

array([0.,1.,2.,3.,4.])

>>>np.logspace(1,3,3)

array([10.,100.,1000.])

>>>np.logspace(1,3,3,endpoint=False)

array([10.,46.41588834,215.443469])

(4)从已有数组创建数组

numpy.asarray(a,dtype=None,order=None)

numpy.empty_like(a,dtype=None,order='K',subok=True)

numpy.zeros_like(a,dtype=None,order='K',subok=True)

numpy.ones_like(a,dtype=None,order='K',subok=True)[source]


应用示例:

>>>np.asarray([1,2,3])

array([1,2,3])

>>>np.empty_like(np.asarray([1,2,3]))

array([0,0,0])

>>>np.zeros_like(np.asarray([1,2,3]))

array([0,0,0])

>>>np.ones_like(np.asarray([1,2,3]))

array([1,1,1])


(5)构造复杂数组[1]重复数组tile

>>>a=np.arange(3)

>>>a

array([0,1,2])

>>>np.tile(a,2)

array([0,1,2,0,1,2])

>>>np.tile(a,(2,3))

array([[0,1,2,0,1,2,0,1,2],

[0,1,2,0,1,2,0,1,2]])

[2]重复元素repeat

>>>a=np.arange(3)

>>>a

array([0,1,2])

>>>a.repeat(2)

array([0,0,1,1,2,2])


[3]一维数组网格化:meshgrid

>>>lon=np.arange(30,120,10)

>>>lon

array([30,40,50,60,70,80,90,100,110])

>>>lat=np.arange(10,50,10)

>>>lat

array([10,20,30,40])

>>>lons,lats=np.meshgrid(lon,lat)

>>>lons

array([[30,40,50,60,70,80,90,100,110],

[30,40,50,60,70,80,90,100,110],

[30,40,50,60,70,80,90,100,110],

[30,40,50,60,70,80,90,100,110]])

>>>lats

array([[10,10,10,10,10,10,10,10,10],

[20,20,20,20,20,20,20,20,20],

[30,30,30,30,30,30,30,30,30],

[40,40,40,40,40,40,40,40,40]])


[4]指定范围和分割方式的网格化:mgrid

>>>lats,lons=np.mgrid[10:50:10,30:120:10]

>>>lats

array([[10,10,10,10,10,10,10,10,10],

[20,20,20,20,20,20,20,20,20],

[30,30,30,30,30,30,30,30,30],

[40,40,40,40,40,40,40,40,40]])

>>>lons

array([[30,40,50,60,70,80,90,100,110],

[30,40,50,60,70,80,90,100,110],

[30,40,50,60,70,80,90,100,110],

[30,40,50,60,70,80,90,100,110]])

>>>lats,lons=np.mgrid[10:50:5j,30:120:10j]

>>>lats

array([[10.,10.,10.,10.,10.,10.,10.,10.,10.,10.],

[20.,20.,20.,20.,20.,20.,20.,20.,20.,20.],

[30.,30.,30.,30.,30.,30.,30.,30.,30.,30.],

[40.,40.,40.,40.,40.,40.,40.,40.,40.,40.],

[50.,50.,50.,50.,50.,50.,50.,50.,50.,50.]])

>>>lons

array([[30.,40.,50.,60.,70.,80.,90.,100.,110.,120.],

[30.,40.,50.,60.,70.,80.,90.,100.,110.,120.],

[30.,40.,50.,60.,70.,80.,90.,100.,110.,120.],

[30.,40.,50.,60.,70.,80.,90.,100.,110.,120.],

[30.,40.,50.,60.,70.,80.,90.,100.,110.,120.]])


上面的例子中用到了虚数。构造复数的方法如下:

>>>complex(2,5)

(2+5j)


4.数组操作(1)切片和索引

对于一维数组的索引和切片,numpy和python的list一样,甚至更灵活。


a=np.arange(9)

>>>a[-1]#最后一个元素

8

>>>a[2:5]#返回第2到第5个元素

array([2,3,4])

>>>a[:7:3]#返回第0到第7个元素,步长为3

array([0,3,6])

>>>a[::-1]#返回逆序的数组

array([8,7,6,5,4,3,2,1,0])


假设有一栋2层楼,每层楼内的房间都是3行4列,那我们可以用一个三维数组来保存每个房间的居住人数(当然,也可以是房间面积等其他数值信息)。

>>>a=np.arange(24).reshape(2,3,4)#2层3行4列

>>>a

array([[[0,1,2,3],

[4,5,6,7],

[8,9,10,11]],

[[12,13,14,15],

[16,17,18,19],

[20,21,22,23]]])

>>>a[1][2][3]#虽然可以这样

23

>>>a[1,2,3]#但这才是规范的用法

23

>>>a[:,0,0]#所有楼层的第1排第1列

array([0,12])

>>>a[0,:,:]#1楼的所有房间,等价与a[0]或a[0,...]

array([[0,1,2,3],

[4,5,6,7],

[8,9,10,11]])

>>>a[:,:,1:3]#所有楼层所有排的第2到4列

array([[[1,2],

[5,6],

[9,10]],

[[13,14],

[17,18],

[21,22]]])

>>>a[1,:,-1]#2层每一排的最后一个房间

array([15,19,23])

提示:对多维数组切片或索引得到的结果,维度不是确定的。

(2)改变数组的结构

numpy数组的存储顺序和数组的维度是不相干的,因此改变数组的维度是非常便捷的操作,除resize外,这一类操作不会改变所操作的数组本身的存储顺序。


>>>a=np.array([[1,2,3],[4,5,6]])

>>>a.shape#查看数组维度

(2,3)

>>>a.reshape(3,2)#返回3行2列的数组

array([[1,2],

[3,4],

[5,6]])

>>>a.ravel#返回一维数组

array([1,2,3,4,5,6])

>>>a.transpose#行变列(类似于矩阵转置)

array([[1,4],

[2,5],

[3,6]])

>>>a.resize((3,2))#类似于reshape,但会改变所操作的数组

>>>a

array([[1,2],

[3,4],

[5,6]])

np.rollaxis用于改变轴的顺序,返回一个新的数组。用法如下:

numpy.rollaxis(a,axis,start=0)


a:数组

axis:要改变的轴。其他轴的相对顺序保持不变

start:要改变的轴滚动至此位置之前。默认值为0

应用示例:

>>>a=np.ones((3,4,5,6))

>>>np.rollaxis(a,3,1).shape

(3,6,4,5)

>>>np.rollaxis(a,2).shape

(5,3,4,6)

>>>np.rollaxis(a,1,4).shape

(3,5,6,4)

(3)数组复制

改变数组结构返回的是原元数据的一个新视图,而原元数据的副本。浅复制(view)和深复制(copy)则是创建原数据的副本,但二者之间也有细微差别:浅复制(view)是共享内存,深复制(copy)则是独享。

>>>a=np.arange(6).reshape((2,3))

>>>b=a.view

>>>bisa

False

>>>b.baseisa

False

>>>b.flags.owndata

False

>>>c=a.copy

>>>cisa

False

>>>c.baseisa

False

>>>c.flags.owndata

True


(4)数组合并[1]append

对于刚刚上手numpy的程序员来说,最大的困惑就是不能使用append方法向数组内添加元素了,甚至连append方法都找不到了。其实,numpy仍然保留了append方法,只不过这个方法不再是numpy数组的方法,而是是升级到最外层的numpy命名空间了,并且该方法的功能不再是追加元素,而是合并数组了。

>>>np.append([1,2,3],[[4,5,6],[7,8,9]])

array([1,2,3,4,5,6,7,8,9])

>>>np.append([[1,2,3]],[[4,5,6]],axis=0)

array([[1,2,3],

[4,5,6]])

>>>np.append(np.array([[1,2,3]]),np.array([[4,5,6]]),axis=1)

array([[1,2,3,4,5,6]])

[2]concatenate

concatenate和append的用法非常类似,不过是把两个合并对象写成了一个元组。

>>>a=np.array([[1,2],[3,4]])

>>>b=np.array([[5,6]])

>>>np.concatenate((a,b),axis=0)

array([[1,2],

[3,4],

[5,6]])

>>>np.concatenate((a,b.T),axis=1)

array([[1,2,5],

[3,4,6]])

>>>np.concatenate((a,b),axis=None)

array([1,2,3,4,5,6])

[3]stack

除了append和concatenate,数组合并还有更直接的水平合并(hstack)、垂直合并(vstack)、深度合并(dstack)等方式。假如你比我还懒,那就只用stack吧,足够了。

>>>a=np.arange(9).reshape(3,3)

>>>b=np.arange(9,18).reshape(3,3)

>>>a

array([[0,1,2],

[3,4,5],

[6,7,8]])

>>>b

array([[9,10,11],

[12,13,14],

[15,16,17]])

>>>np.hstack((a,b))#水平合并

array([[0,1,2,9,10,11],

[3,4,5,12,13,14],

[6,7,8,15,16,17]])

>>>np.vstack((a,b))#垂直合并

array([[0,1,2],

[3,4,5],

[6,7,8],

[9,10,11],

[12,13,14],

[15,16,17]])

>>>np.dstack((a,b))#深度合并

array([[[0,9],

[1,10],

[2,11]],

[[3,12],

[4,13],

[5,14]],

[[6,15],

[7,16],

[8,17]]])

stack函数原型为stack(arrays,axis=0),请注意体会下面例子中的axis的用法。

>>>a=np.arange(60).reshape(3,4,5)

>>>b=np.arange(60).reshape(3,4,5)

>>>a.shape,b.shape

((3,4,5),(3,4,5))

>>>np.stack((a,b),axis=0).shape

(2,3,4,5)

>>>np.stack((a,b),axis=1).shape

(3,2,4,5)

>>>np.stack((a,b),axis=2).shape

(3,4,2,5)

>>>np.stack((a,b),axis=3).shape

(3,4,5,2)

(5)数组拆分

拆分是合并的逆过程,概念是一样的,但稍微有一点不同:

>>>a=np.arange(4).reshape(2,2)

>>>a

array([[0,1],

[2,3]])

>>>x,y=np.hsplit(a,2)#水平拆分,返回list

>>>x

array([[0],

[2]])

>>>y

array([[1],

[3]])

>>>x,y=np.vsplit(a,2)#垂直拆分,返回list

>>>x

array([[0,1]])

>>>y

array([[2,3]])

>>>a=np.arange(8).reshape(2,2,2)

>>>a

array([[[0,1],

[2,3]],

[[4,5],

[6,7]]])

>>>x,y=np.dsplit(a,2)#深度拆分,返回list

>>>x

array([[[0],

[2]],

[[4],

[6]]])

>>>y

array([[[1],

[3]],

[[5],

[7]]])

(6)数组排序

排序不是numpy数组的强项,但python数组的排序速度依然只能望其项背。

[1]numpy.sort

numpy.sort函数返回输入数组的排序副本。

numpy.sort(a,axis=-1,kind='quicksort',order=None)


a:要排序的数组

axis:沿着它排序数组的轴,如果没有,数组会被展开,沿着最后的轴排序

kind:排序方法,默认为’quicksort’(快速排序),其他选项还有‘mergesort’(归并排序)和‘heapsort’(堆排序)

order:如果数组包含字段,则是要排序的字段

应用示例:

>>>a=np.array([3,1,2])

>>>np.sort(a)

array([1,2,3])

>>>dt=np.dtype([('name','S10'),('age',int)])

>>>a=np.array([("raju",21),("anil",25),("ravi",17),("amar",27)],dtype=dt)

>>>a

array([(b'raju',21),(b'anil',25),(b'ravi',17),(b'amar',27)],

dtype=[('name','S10'),('age','<i4')])

>>>np.sort(a,order='name')

array([(b'amar',27),(b'anil',25),(b'raju',21),(b'ravi',17)],

dtype=[('name','S10'),('age','<i4')])

[2]numpy.argsort

函数返回的是数组值从小到大的索引值。

numpy.argsort(a,axis=-1,kind='quicksort',order=None)


a:要排序的数组

axis:沿着它排序数组的轴,如果没有,数组会被展开,沿着最后的轴排序

kind:排序方法,默认为’quicksort’(快速排序),其他选项还有‘mergesort’(归并排序)和‘heapsort’(堆排序)

order:如果数组包含字段,则是要排序的字段

应用示例:


>>>a=np.array([3,1,2])

>>>np.argsort(a)

array([1,2,0],dtype=int64)

(7)查找和筛选[1]返回数组中最大值和最小值的索引

numpy.argmax(a,axis=None,out=None)

numpy.argmin(a,axis=None,out=None)

[2]返回数组中非零元素的索引

numpy.nonzero(a)


[3]返回数组中满足给定条件的元素的索引

numpy.where(condition[,x,y])

应用示例:

>>>a=np.arange(10)

>>>a

array([0,1,2,3,4,5,6,7,8,9])

>>>np.where(a<5)

(array([0,1,2,3,4],dtype=int64),)

>>>a=a.reshape((2,-1))

>>>a

array([[0,1,2,3,4],

[5,6,7,8,9]])

>>>np.where(a<5)

(array([0,0,0,0,0],dtype=int64),array([0,1,2,3,4],dtype=int64))

>>>np.where(a<5,a,10*a)

array([[0,1,2,3,4],

[50,60,70,80,90]])

[4]返回数组中被同结构布尔数组选中的各元素

numpy.extract(condition,arr)

应用示例:

>>>a=np.arange(12).reshape((3,4))

>>>a

array([[0,1,2,3],

[4,5,6,7],

[8,9,10,11]])

>>>condition=np.mod(a,3)==0

>>>condition

array([[True,False,False,True],

[False,False,True,False],

[False,True,False,False]])

>>>np.extract(condition,a)

array([0,3,6,9])

(8)增减元素[1]在给定索引之前沿给定轴在输入数组中插入值,并返回新的数组

numpy.insert(arr,obj,values,axis=None)

应用示例:


>>>a=np.array([[1,1],[2,2],[3,3]])

>>>a

array([[1,1],

[2,2],

[3,3]])

>>>np.insert(a,1,5)

array([1,5,1,2,2,3,3])

>>>np.insert(a,1,5,axis=0)

array([[1,1],

[5,5],

[2,2],

[3,3]])

>>>np.insert(a,1,[5,7],axis=0)

array([[1,1],

[5,7],

[2,2],

[3,3]])

>>>np.insert(a,1,5,axis=1)

array([[1,5,1],

[2,5,2],

[3,5,3]])

[2]在给定索引之前沿给定轴删除指定子数组,并返回新的数组

numpy.delete(arr,obj,axis=None)

应用示例:

>>>a=np.array([[1,2],[3,4],[5,6]])

>>>a

array([[1,2],

[3,4],

[5,6]])

>>>np.delete(a,1)

array([1,3,4,5,6])

>>>np.delete(a,1,axis=0)

array([[1,2],

[5,6]])

>>>np.delete(a,1,axis=1)

array([[1],

[3],

[5]])

[3]去除重复元素

numpy.unique(ar,return_index=False,return_inverse=False,return_counts=False,axis=None)


arr:输入数组,如果不是一维数组则会展开

return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储

return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储

return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数

应用示例:

>>>a=np.array([[1,0,0],[1,0,0],[2,3,4]])

>>>np.unique(a)

array([0,1,2,3,4])

>>>np.unique(a,axis=0)

array([[1,0,0],

[2,3,4]])

>>>u,indices=np.unique(a,return_index=True)

>>>u

array([0,1,2,3,4])

>>>indices

array([1,0,6,7,8],dtype=int64)

>>>u,indices=np.unique(a,return_inverse=True)

>>>u

array([0,1,2,3,4])

>>>indices

array([1,0,0,1,0,0,2,3,4],dtype=int64)

>>>u,num=np.unique(a,return_counts=True)

>>>u

array([0,1,2,3,4])

>>>num

array([4,2,1,1,1],dtype=int64)

(9)数组IO

numpy为ndarray对象引入了新的二进制文件格式,用于存储重建ndarray所需的数据、图形、dtype和其他信息。.npy文件存储单个数组,.npz文件存取多个数组。

[1]保存单个数组到文件

numpy.save(file,arr,allow_pickle=True,fix_imports=True)


file:要保存的文件,扩展名为.npy,如果文件路径末尾没有扩展名.npy,该扩展名会被自动加上

arr:要保存的数组

allow_pickle:可选,布尔值,允许使用pythonpickles保存对象数组,python中的pickle用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列化和反序列化

fix_imports:可选,为了方便pyhton2读取python3保存的数据

[2]保存多个数组到文件

numpy.savez函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npz的文件中。


numpy.savez(file,*args,**kwds)


file:要保存的文件,扩展名为.npz,如果文件路径末尾没有扩展名.npz,该扩展名会被自动加上

args:要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0,arr_1,…

kwds:要保存的数组使用关键字名称

[3]从文件加载数组

numpy.load(file,mmap_mode=None,allow_pickle=True,fix_imports=True,encoding='ASCII')


file:类文件对象(支持seek()和read()方法)或者要读取的文件路径

arr:打开方式,None|‘r+’|‘r’|‘w+’|‘c’

allow_pickle:可选,布尔值,允许使用pythonpickles保存对象数组,python中的pickle用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列化和反序列化

fix_imports:可选,为了方便pyhton2读取python3保存的数据

encoding:编码格式,‘latin1’|‘ASCII’|‘bytes’

应用示例:

a=np.array([[1,2,3],[4,5,6]])

b=np.arange(0,1.0,0.1)

c=np.sin(b)

#c使用了关键字参数sin_array

np.savez("runoob.npz",a,b,sin_array=c)

r=np.load("runoob.npz")

print(r.files)#查看各个数组名称

print(r["arr_0"])#数组a

print(r["arr_1"])#数组b

print(r["sin_array"])#数组c

[4]使用文本文件存取数组

numpy也支持以文本文件存取数据。savetxt函数是以简单的文本文件格式存储数据,对应的使用loadtxt函数来获取数据。

应用示例:

a=np.array([1,2,3,4,5])

np.savetxt('out.txt',a)

b=np.loadtxt('out.txt')

print(b)

5.常用函数(1)舍入函数[1]四舍五入

numpy.around(a,decimals=0,out=None)


应用示例:


>>>np.around([-0.42,-1.68,0.37,1.64])

array([-0.,-2.,0.,2.])

>>>np.around([-0.42,-1.68,0.37,1.64],decimals=1)

array([-0.4,-1.7,0.4,1.6])

>>>np.around([.5,1.5,2.5,3.5,4.5])#roundstonearestevenvalue

array([0.,2.,2.,4.,4.])

[2]去尾和进一

numpy.floor(a)

numpy.ceil(a)

应用示例:


>>>np.floor([-0.42,-1.68,0.37,1.64])

array([-1.,-2.,0.,1.])

>>>np.ceil([-0.42,-1.68,0.37,1.64])

array([-0.,-1.,1.,2.])

(2)数学函数(3)统计函数6.牛刀小试

**例题**vertices是若干三维空间随机点的集合,p是三维空间的一点,找出vertices中距离p点最近的一个点,并计算它们的距离。

1.用python数组实现:


importmath

vertices=[[3,4,5],[7,8,9],[4,9,3]]

p=[2,7,4]

d=list

forvinvertices:

d.append(math.sqrt(math.pow(v[0]-p[0],2)+math.pow(v[1]-p[1],2)+math.pow(v[2]-p[2],2)))

print(vertices[d.index(min(d))],min(d))

2.用numpy数组实现:

importnumpyasnp
vertices=np.array([[3,4,5],[7,8,9],[4,9,3]])
p=np.array([2,7,4])
d=np.sqrt(np.sum(np.square((vertices-p)),axis=1))
print(vertices[d.argmin()],d.min)

用随机方式生成1000个点,比较两种的方法的效率。

本文链接:

https://blog.csdn.net/xufive/article/details/87396460

(*本文为AI科技大本营转载文章,转载请联系原作者)

2019中国大数据技术大会(BDTC)历经十一载,再度火热来袭!豪华主席阵容及百位技术专家齐聚,15场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。【早鸟票】【特惠学生票】限时抢购,扫码了解详情!

本文主要介绍了关于npy是什么意思(如果你不懂Numpy的话)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/100086.html