Python数据分析库-Numpy库在数据分析中的知识点(一)

各位客官姥爷好,欢迎回来。细心的你们肯定发现在pandas知识点(二)一文中用到了numpy库,numpy库也是我们这些数据人经常用的python库之一,那么numpy又有哪些知识点呢?我们本节先来看看如何创建数组。

01

 创建普通数组

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

object参数:可以是数列,元组,数组等对象

dtype参数:表示数据类型(注意这个参数同时也说明array返回的是同类型数组),在numpy中常用的数据类型有:

数据类型

解释说明

bool

布尔类型

str

字符类型

int、uint

有符号和无符号的32位整型

int8、uint8

有符号和无符号的8位整型

int16、uint16

有符号和无符号的16位整型

int32、uint32

有符号和无符号的32位整型

int64、uint64

有符号和无符号的64位整型

float、float64

双精度浮点数

float32

单精度浮点数

float16

半精度浮点数

complex、complex128

128位复数

complex64

64位复数

copy参数:表示是否需要复制,可能有不少人对这个参数表示不理解,下面会给出示例。

order参数:表示数组在内存中的布局,包含这四种值:{'K’, 'A’, 'C’, 'F’},K为内存中的顺序,a为任意顺序,C为按行顺序,F为按列顺序。

subok参数:表示是否需要返回一个基类数组,默认为False。

ndmin参数:表示数组的最小维数。

具体的用法,请见下面示例:

#示例1import numpy as npL = [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.005arr

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.005arr

array(['0.005', '0', '1', '2', '3', '4'], dtype='<U10')

#示例3L = [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也会改变。

#示例4L = [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.]])

以上就是本次的分享,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!

(0)

相关推荐