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参数:表示数组的最小维数。
具体的用法,请见下面示例:
#示例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.]])
以上就是本次的分享,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!