各位客官姥爷好,欢迎回来。细心的你们肯定发现在pandas知识点(二)一文中用到了numpy库,numpy库也是我们这些数据人经常用的python库之一,那么numpy又有哪些知识点呢?我们本节先来看看如何创建数组。 01 创建普通数组 numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0) object参数:可以是数列,元组,数组等对象 dtype参数:表示数据类型(注意这个参数同时也说明array返回的是同类型数组),在numpy中常用的数据类型有:
copy参数:表示是否需要复制,可能有不少人对这个参数表示不理解,下面会给出示例。 order参数:表示数组在内存中的布局,包含这四种值:{'K’, 'A’, 'C’, 'F’},K为内存中的顺序,a为任意顺序,C为按行顺序,F为按列顺序。 subok参数:表示是否需要返回一个基类数组,默认为False。 ndmin参数:表示数组的最小维数。 具体的用法,请见下面示例: #示例1 import numpy as np L = [0.05,0,1,2,3,4] arr = np.array(L) arr array([0.05, 0. , 1. , 2. , 3. , 4. ]) L数列中的数据类型并非都是浮点型,但数组返回的都是浮点型,也验证了我们上面的猜测。 #示例2 注意如果dtype使用str的话,这里有个坑
L = [0.05,0,1,2,3,4] arr = np.array(L,dtype = np.str) arr array(['0.05', '0', '1', '2', '3', '4'], dtype='<U4') dtype='<U4'说明该数组的str最大长度为4个,我们试着改下数组元素的长度,看多余的内容会不会被截取。 arr[0] = 0.005 arr array(['0.00', '0', '1', '2', '3', '4'], dtype='<U4') 0.005多余的5直接被截掉了,在实际使用过程中需要注意这个特性,如果想指定长度怎么办?比如这里指定最大长度为10个字符,可使用dtype='<U10' L = [0.05,0,1,2,3,4] arr = np.array(L,dtype = '<U10') arr array(['0.05', '0', '1', '2', '3', '4'], dtype='<U10') arr[0] = 0.005 arr array(['0.005', '0', '1', '2', '3', '4'], dtype='<U10') #示例3 L = [i for i in range(5)] arr = np.array(L) print(arr,id(arr)) brr = np.array(arr,copy=True) print(brr,id(brr)) crr = np.array(arr,copy=False) print(crr,id(crr)) [0 1 2 3 4] 280345822672 [0 1 2 3 4] 280345822992 [0 1 2 3 4] 280345822672 通过数组的内存地址,可以判断brr是arr的一个副本,修改brr时不会影响arr,而crr和arr是同一个对象,修改crr时arr也会改变。 #示例4 L = [i for i in range(5)] arr = np.array(L,ndmin=3) print(arr) [[[0 1 2 3 4]]] 02 创建特殊数组 1. 创建空数组 numpy.empty( shape , dtype=float , order='C' , * ) 创建一个给定形状的空数组,随机返回的是内存中的任意值。 np.empty([2,2]) array([[1. , 3.5], [6. , 8.5]]) 2. 创建全为0的数组 numpy.zeros(shape, dtype=float, order='C', *) np.zeros([3,3]) array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]) 3. 创建全为1的数组 numpy.ones(shape, dtype=None, order='C', *) np.ones([3,3]) array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]]) 4. 创建全为指定值的数组 numpy.full(shape, fill_value, dtype=None, order='C', *) #创建全为5的数组 np.full([2,2],5) array([[5, 5], [5, 5]]) 5. 创建同结构的全为指定值的数组 numpy.full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None) x = [[m,n] for m in range(2) for n in range(1)] np.full_like(x,5) array([[5, 5], [5, 5]]) np.empty_like、np.zeros_like、np.ones_like的用法类似。 03 创建等差数组 这里有两种方法一种是linspace,一种是arange 1. numpy.linspace numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) #endpoint表示是否包含末尾数,retstep表示是否返回等差步长 np.linspace(0, 10, num=5, endpoint=True, retstep=True) (array([ 0. , 2.5, 5. , 7.5, 10. ]), 2.5) np.linspace(0, 10, num=5, endpoint=False, retstep=False) array([0., 2., 4., 6., 8.]) 2. numpy.arange numpy.arange( [ start , ] stop , [ step , ] dtype=None , * , like=None ) 用法与python中的range类似 #创建一个1-10的以2为步长的数组 np.arange(1,10,2,dtype=np.float32) array([1., 3., 5., 7., 9.], dtype=float32) 04 创建等比数组 这里分为两种:一种是对数等比数组,一种是常数等比数组 1. 对数等比数组 numpy.logspace( start , stop , num=50 , endpoint=True , base=10.0 , dtype=None ) #endpoint同样表示是否包含末尾数,base表示以多少为底,默认以10为底 np.logspace( 1.0, 2.0, num=4, endpoint=True , base=10.0 , dtype=None ) array([ 10. , 21.5443469 , 46.41588834, 100. ]) 2. 常数等比数组 numpy.geomspace( start , stop , num=50 , endpoint=True , dtype=None ) np.geomspace( 1.0, 2.0 , num=4 , endpoint=True , dtype=None ) array([1. , 1.25992105, 1.58740105, 2. ]) 05 创建随机数组 0. 设定随机种子 numpy.random.seed(self, seed=None) 设定种子之后保证下次出现同样的随机数,目的是保证结果的可重现性。 for i in range(5): np.random.seed(0) print(np.random.random()) 0.5488135039273248 0.5488135039273248 0.5488135039273248 0.5488135039273248 0.5488135039273248 1. 创建0-1的随机数组 numpy.random.random(size=None) #创建一个2x3的0-1随机数组 np.random.random((2,3)) array([[0.16658965, 0.8767869 , 0.00399439], [0.49294625, 0.64384198, 0.50076445]]) 2. 创建指定范围的随机数组 numpy.random.randint(low, high=None, size=None, dtype=int) #创建一个0-10的2x2的数组,注意这里不包含10。 np.random.randint(1,10,(2,2)) array([[9, 8], [7, 8]]) (以下分布均以演示为主,因此样本量取得可能不符合分布本身) 3. 创建二项分布随机数组 numpy.random.binomial( n , p , size=None ) 其中n就是试验次数,p就是概率,返回的是成功次数 np.random.binomial( 10 , 0.5 , size=10 ) array([5, 5, 5, 2, 4, 4, 5, 4, 6, 6]) 4. 创建伯努利分布随机数组 二项分布是n重伯努利分布,因此只需要修改二项分布的参数即可。 np.random.binomial( 1 , 0.5 , size=10 ) array([1, 0, 0, 1, 1, 1, 0, 0, 1, 0]) 5. 创建泊松分布随机数组 numpy.random.poisson( lam=1.0 , size=None ) np.random.poisson( lam=5 , size=20 ) array([8, 3, 6, 2, 2, 6, 8, 3, 6, 4, 5, 6, 3, 3, 2, 4, 4, 6, 2, 4]) 6. 创建均匀分布随机数组 numpy.random.uniform( low=0.0 , high=1.0 , size=None ) np.random.uniform( low=1, high=5 , size=5 ) array([4.06305662, 4.41657892, 3.52342335, 4.1934221 , 2.06262711]) 7. 创建正态分布随机数组 numpy.random.normal( loc=0.0 , scale=1.0 , size=None ) #默认生成标准正态分布 np.random.normal((1,2)) array([-0.41613726, 1.07673522]) 8. 创建卡方分布随机数组 numpy.random.chisquare( df , size=None ) 其中df为自由度 np.random.chisquare(2, size=5 ) array([2.95056373, 0.49918411, 0.05092094, 1.39836678, 5.61893985]) 9. 创建T分布随机数组 numpy.random.standard_t( df , size=None ) np.random.standard_t( 1 , size=3 ) array([ 4.32611206, -0.11124319, 2.36212038]) 10. 创建F分布随机数组 numpy.random.f( dfnum , dfden , size=None ) 其中dfnum表示分子的自由度,dfden表示分母的自由度 np.random.f( 1 , 3 , size=3 ) array([4.43891807, 0.21924538, 0.00459036]) 06 创建矩阵 1. 创建单位矩阵 numpy.eye(N,M=None,k=0,dtype=None,order='C', *) #其中k值表示对角线,0表示主对角线,-1表示第一个下对角线,1表示第一个上对角线 x= np.eye(3,k=0) y= np.eye(3,k=1) z= np.eye(3,k=-1) print(x) print(y) print(z) [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] [[0. 1. 0.] [0. 0. 1.] [0. 0. 0.]] [[0. 0. 0.] [1. 0. 0.] [0. 1. 0.]] 2. 创建对角矩阵 numpy.identity( n , dtype=None , * ) np.identity(3) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) 以上就是本次的分享,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】! |
|