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]
反三角函数
arcsin
,arccos
,和arctan
函数返回给定角度的sin
,cos
和tan
的反三角函数。 这些函数的结果可以通过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]]