博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NumPy学习(让数据处理变简单)
阅读量:6047 次
发布时间:2019-06-20

本文共 9103 字,大约阅读时间需要 30 分钟。

 

NumPy学习(一)

 

NumPy数组创建

NumPy数组属性

NumPy数学算术与算数运算

 

 

NumPy数组创建

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。

  

它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。

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

 

序号	参数及描述1.	object 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。2.	dtype 数组的所需数据类型,可选。3.	copy 可选,默认为true,对象是否被复制。4.	order C(按行)、F(按列)或A(任意,默认)。5.	subok 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。6.	ndimin 指定返回数组的最小维数。

 

 

dtype用来设置元素的数据类型

NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。序号	数据类型及描述1.	bool_存储为一个字节的布尔值(真或假)2.	int_默认整数,相当于 C 的long,通常为int32或int643.	intc相当于 C 的int,通常为int32或int644.	intp用于索引的整数,相当于 C 的size_t,通常为int32或int645.	int8字节(-128 ~ 127)6.	int1616 位整数(-32768 ~ 32767)7.	int3232 位整数(-2147483648 ~ 2147483647)8.	int6464 位整数(-9223372036854775808 ~ 9223372036854775807)9.	uint88 位无符号整数(0 ~ 255)10.	uint1616 位无符号整数(0 ~ 65535)11.	uint3232 位无符号整数(0 ~ 4294967295)12.	uint6464 位无符号整数(0 ~ 18446744073709551615)13.	float_float64的简写14.	float16半精度浮点:符号位,5 位指数,10 位尾数15.	float32单精度浮点:符号位,8 位指数,23 位尾数16.	float64双精度浮点:符号位,11 位指数,52 位尾数17.	complex_complex128的简写18.	complex64复数,由两个 32 位浮点表示(实部和虚部)19.	complex128复数,由两个 64 位浮点表示(实部和虚部)

  

 

最简单的创建方式

import numpy as np
#将列表转为numpy的数组array=np.array([[1,2,3],[4,5,6]]) print(array)

 

运行结果:
[[1 2 3][4 5 6]]

  

1.

创建特殊数组

返回特定大小,以 0 填充的新数组。

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

import numpy as np
#定义一个三行四列全为零的矩阵c=np.zeros((3,4)) print(c)

 

运算结果:

[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]

  

 

2.

返回特定大小,以 1 填充的新数组。

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

import numpy as np #定义一个3行2列全为1的矩阵d=np.ones((3,2)) print(d)

 

 

运行结果:

[[1. 1.] [1. 1.] [1. 1.]]

 

 

3.

它创建指定形状和dtype的未初始化数组。 它使用以下构造函数:

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

构造器接受下列参数:序号	参数及描述1.	Shape 空数组的形状,整数或整数元组2.	Dtype 所需的输出数组类型,可选3.	Order 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

  

import numpy as np #生成一个空矩阵,还不懂这里的空到底指什么。。。e=np.empty((3,1)) print(e)

 

运行结果:

[[1.443e-321] [0.000e+000] [0.000e+000]]

 

 

4.

此函数类似于arange()函数。 在此函数中,指定了范围之间的均匀间隔数量,而不是步长。 此函数的用法如下。

numpy.linspace(start, stop, num, endpoint, retstep, dtype)

import numpy as np #将一段连续长大小为分几份f=np.linspace(1,10,5) #这里的意思就是 print(f)

 

运行结果:

[ 1.    3.25  5.5   7.75 10.  ]

  

 

5.

这个函数返回ndarray对象,包含给定范围内的等间隔值。

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

import numpy as np 返回等间隔数字的数组array2=np.arange(6) #一个参数,默认从零开始;两个参数,从第一个参数开始,到第二个参数,不包括第二个参数;三个参数,最后一个为间隔的大 小,默认为1 print(array2)

 

运行结果:

[0 1 2 3 4 5]

  

 

6.

import numpy as np f=np.random.random((2,4)) #生成两行四列的数组,每个元素大于0小于1 print(f)

 

运行结果:

[[0.92670103 0.92050586 0.67470818 0.61072068] [0.52409562 0.562209   0.08881487 0.06907785]]

 

 

 

 

NumPy数组属性及方法

 

ndarray.shape

这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。

ndarray.ndim

这一数组属性返回数组的维数。

numpy.itemsize

这一数组属性返回数组中每个元素的字节单位长度。

numpy.size

这一 数组属性返回数组中所有元素的个数

numpy.dtype()

返回数组元素的数据类型

numpy.flags

ndarray对象拥有以下属性。这个函数返回了它们的当前值。

序号	属性及描述1.	C_CONTIGUOUS (C) 数组位于单一的、C 风格的连续区段内2.	F_CONTIGUOUS (F) 数组位于单一的、Fortran 风格的连续区段内3.	OWNDATA (O) 数组的内存从其它对象处借用4.	WRITEABLE (W) 数据区域可写入。 将它设置为flase会锁定数据,使其只读5.	ALIGNED (A) 数据和任何元素会为硬件适当对齐6.	UPDATEIFCOPY (U) 这个数组是另一数组的副本。当这个数组释放时,源数组会由这个数组中的元素更

  

 

程序示例:

import numpy as np#将列表转为numpy的数组array=np.array([[1,2,3],[4,5,6]])
print(array.ndim) #输出数组维度
#shape属性默认输出行列,也可以设置数组的行列 print(array.shape) #输出行列 #第一种设置行列的方法array.shape =(3,2)print(array)#第二种设置行列的方法array=array.reshape(2,3) #注意一定要重新赋值print(array) print(array.itemsize) #每个元素的字节长度单位,可以通过dtype参数设置 print(array.size) #所有元素的个数 print(array.flags) #展示当前的标志

 

 

运行结果

2[[1 2] [3 4] [5 6]][[1 2 3] [4 5 6]]46  C_CONTIGUOUS : True  F_CONTIGUOUS : False  OWNDATA : False  WRITEABLE : True  ALIGNED : True  WRITEBACKIFCOPY : False  UPDATEIFCOPY : False

  

 

 

 

NumPy算数函数与算数运算

NumPy 包含大量的各种数学运算功能。 NumPy 提供标准的三角函数,算术运算的函数,复数处理函数等。

 

三角函数

NumPy 拥有标准的三角函数,它为弧度制单位的给定角度返回三角函数比值。

 

程序示例

import numpy as npa = np.array([0,30,45,60,90])  print  '不同角度的正弦值:'  # 通过乘 pi/180 转化为弧度  print np.sin(a*np.pi/180)  print  '\n'  print  '数组中角度的余弦值:'  print np.cos(a*np.pi/180)  print  '\n'  print  '数组中角度的正切值:'  print np.tan(a*np.pi/180)

 

 

运行结果

不同角度的正弦值:                                                   [ 0.          0.5         0.70710678  0.8660254   1.        ]                 数组中角度的余弦值:                                         [  1.00000000e+00   8.66025404e-01   7.07106781e-01   5.00000000e-01             6.12323400e-17]                                                            数组中角度的正切值:                                            [  0.00000000e+00   5.77350269e-01   1.00000000e+00   1.73205081e+00             1.63312394e+16]

 

 

反三角函数

arcsinarccos,和arctan函数返回给定角度的sincostan的反三角函数。 这些函数的结果可以通过numpy.degrees()函数通过将弧度制转换为角度制来验证。

 

程序示例

import numpy as npa = np.array([0,30,45,60,90])  print ('含有正弦值的数组:')sin = np.sin(a*np.pi/180)  print(sin)print('计算角度的反正弦,返回值以弧度为单位:')inv = np.arcsin(sin)  print(inv)print ('通过转化为角度制来检查结果:')print(np.degrees(inv))

 

运行结果

含有正弦值的数组:[0.         0.5        0.70710678 0.8660254  1.        ]计算角度的反正弦,返回值以弧度为单位:[0.         0.52359878 0.78539816 1.04719755 1.57079633]通过转化为角度制来检查结果:[ 0. 30. 45. 60. 90.]

 

 

 

舍入函数

numpy.around()

这个函数返回四舍五入到所需精度的值。 该函数接受以下参数。numpy.around(a,decimals)

 

序号	参数及描述1.	a 输入数组2.	decimals 要舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置

  

 

程序示例

import numpy as npa = np.array([1.0,5.55,  123,  0.567,  25.532])  print('原数组:')print(a) print('舍入后:') print(np.around(a)) print np.around((a, decimals =  1))print np.around((a, decimals =  -1))

 

 

运行结果

原数组:                                                          [   1.       5.55   123.       0.567   25.532]舍入后:                                                         [   1.    6.   123.    1.   26. ]                                               [   1.    5.6  123.    0.6  25.5]                                          [   0.    10.  120.    0.   30. ]

  

 

 

numpy.floor()

此函数返回不大于输入参数的最大整数。 即标量x 的下限是最大的整数i ,使得i <= x。 注意在Python中,向下取整总是从 0 舍入。 说这么多,就是向下取整,比如一个数:-1.7,向下取整为-2,向上取整为-1
import numpy as npa = np.array([-1.7,  1.5,  -0.2,  0.6,  10])  print('提供的数组:')print(a)print('修改后的数组:')print(np.floor(a))

 

提供的数组:[-1.7 1.5 -0.2 0.6 10. ]修改后的数组:[-2. 1. -1. 0. 10.]

 

numpy.ceil()

ceil()函数返回输入值的上限,即,标量x的上限是最小的整数i ,使得i> = x

就是向上取整。

 

 

 

 

算数运算

 

程序示例

import  numpy as np #一维数组的简单计算 a= np.array([10,23,44,30]) b=np.arange(4) print(a) print(b) #相同位置相加 c=a+b print(c) #乘法 c=a*b print(c) #b**2 c=b**2 print(c) print(a<2) print(a==2)

 

 

运行结果

[10 23 44 30][0 1 2 3][10 24 46 33][ 0 23 88 90][0 1 4 9][False False False False][False False False False]

  

 

程序示例

import numpy as np array1=np.array([[1,4],[4,8]])array2=np.arange(4).reshape(2,2)#这里依然对应位置相乘d=array1*array2print(d)#矩阵的乘法d=np.dot(array1,array2)print(d)d=array1.dot(array2)print(d)#1为行,0为列f=np.random.random((2,4))print(f)print(np.sum(f))print(np.min(f))print(np.max(f))print(np.sum(f,axis=1))print(np.min(f,axis=0))print(np.max(f,axis=1))

  

 

 

运行结果

[[ 0  4] [ 8 24]][[ 8 13] [16 28]][[ 8 13] [16 28]][[0.81949136 0.53538773 0.98840439 0.80249925] [0.65929239 0.69338047 0.00943806 0.56616625]]5.07405989773528350.0094380592127958350.9884043925380781[3.14578273 1.92827717][0.65929239 0.53538773 0.00943806 0.56616625][0.98840439 0.69338047]

  

 

import numpy as np# #将列表转为numpy的数组array1=np.arange(2,14).reshape(3,4)print(array1)print('总和')print(array1.sum())print('最大最小值')print(array1.max())print(array1.min())print('最大最小值的索引')print(array1.argmin())print(array1.argmax())print('平均值')print(array1.mean())print(np.average((array1)))print('分别计算行和列的平均值')print(np.mean(array1,axis=0))print(np.mean(array1,axis=1))print('中位值')print(np.median(array1))print('累积值')print(np.cumsum(array1))print('前一项减后一项')print(np.diff(array1))print('数组中不为零的值')print(np.nonzero(array1))print(array1[np.nonzero(array1)])print('数组中满足条件')print(np.where(array1>10))print(array1[np.where(array1>10)])print('矩阵的转置')print(np.transpose(array1))print('所有大于9的元素等于9,所有小于5的元素等于5')print(np.clip(array1,5,9))

  

 

[[ 2  3  4  5] [ 6  7  8  9] [10 11 12 13]]90最大最小值132最大最小值的索引011平均值7.57.5分别计算行和列的平均值[6. 7. 8. 9.][ 3.5  7.5 11.5]中位值7.5累积值[ 2  5  9 14 20 27 35 44 54 65 77 90]前一项减后一项[[1 1 1] [1 1 1] [1 1 1]]数组中不为零的值(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))[ 2  3  4  5  6  7  8  9 10 11 12 13]数组中满足条件(array([2, 2, 2], dtype=int64), array([1, 2, 3], dtype=int64))[11 12 13]矩阵的转置[[ 2  6 10] [ 3  7 11] [ 4  8 12] [ 5  9 13]]所有大于9的元素等于9,所有小于5的元素等于5[[5 5 5 5] [6 7 8 9] [9 9 9 9]]

  

 

 

用于执行算术运算(如add(),subtract(),multiply()和divide())的输入数组必须具有相同的形状或符合数组广播规则。

程序示例

import numpy as np a = np.arange(9, dtype = np.float_).reshape(3,3) print('第一个数组:'  ) print (a ) print ('第二个数组:' ) b = np.array([10,10,10]) print(b ) print('两个数组相加:') print(np.add(a,b) ) print ('两个数组相减:'  ) print(np.subtract(a,b)  ) print ('两个数组相乘:'  ) print(np.multiply(a,b) ) print ('两个数组相除:' ) print(np.divide(a,b))

 

 

运行结果

第一个数组:[[ 0. 1. 2.] [ 3. 4. 5.] [ 6. 7. 8.]]第二个数组:[10 10 10]两个数组相加:[[ 10. 11. 12.] [ 13. 14. 15.] [ 16. 17. 18.]]两个数组相减:[[-10. -9. -8.] [ -7. -6. -5.] [ -4. -3. -2.]]两个数组相乘:[[ 0. 10. 20.] [ 30. 40. 50.] [ 60. 70. 80.]]两个数组相除:[[ 0. 0.1 0.2] [ 0.3 0.4 0.5] [ 0.6 0.7 0.8]]

  

 

转载于:https://www.cnblogs.com/-wenli/p/10261496.html

你可能感兴趣的文章
使用node打造自己的命令行工具方法教程
查看>>
Express代理中间件问题与解决方案
查看>>
||和&&返回什么?
查看>>
linux在文件中查找指定字符串,然后根据查找结果来做进一步的处理
查看>>
在Oracle中删除所有强制性外键约束
查看>>
【R】R语言使用命令行参数 - [编程技巧(Program Skill)]
查看>>
经典算法题每日演练——第二题 五家共井
查看>>
存储过程中拼接的变量和点的问题
查看>>
ASP.NET那点不为人知的事(一)
查看>>
3.16
查看>>
表单文件上传与文件下载
查看>>
下午考
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>
HDU 2243 考研路茫茫——单词情结(自动机)
查看>>