呀~博主是正在学习数据分析的一员,记录的是自己学习过程中总结的知识点,肯定有不完善的地方,如有问题可以私聊我改正,共同学习进步。希望大家都能保持学习的热情,坚持自己,不断超越自己!
博客地址:qxi的博客
PS:我先简单说明一下,从统计学语言的角度来看,一维数组
可以称为vector(向量);而二维数组可以称为matrix(矩阵);三维以上的就没有特殊名称,但是全都称为array,向量、矩阵都可以看作是数组的特殊形式。所以凡是涉及到二维数组的,我的文章里面都直接称为矩阵
了,一维数组我有时称之为序列
(类似列表)。
#这篇文章主要总结的是numpy模块中生成数组的几个函数,包括生成零矩阵,随机矩阵以及如何指定产生几行几列的矩阵,重点讲了array()函数,arange()函数,reshape()函数以及repeat()函数。#
1.numpy模块中的array()
函数
①将列表转化为矩阵,列表里每个元素为一行。
**两行起就需要([[],[]])**切记不要少了中括号
import numpy as np
array=np.array([[1,2,3],[2,2,3]])
print(array)
②判断该矩阵的维度(都是二维),用array.ndim
;判断几行几列,用array.shape
;判断有多少元素,用array.size
import numpy as np
array=np.array([[1,2,3],[2,2,3]])
print(array)
print('number of ndim:',array.ndim)
print('shape:',array.shape)
print('size:',array.size)
运行结果:
[[1 2 3]
[2 2 3]]
number of ndim: 2
shape: (2, 3)
size: 6
2.定义矩阵的数据形式
整数形式:
import numpy as np
a=np.array([1,2,3],dtype=np.int)
print(a)
print(a.dtype)
运行结果,默认为32位(主要看各位安装的python版本):
[1 2 3]
int32
小数形式:
import numpy as np
a=np.array([1,2,3],dtype=np.float)
print(a)
print(a.dtype)
运行结果,默认为64位:
[1. 2. 3.]
float64
3.生成零矩阵,不用array函数了,用zeros()
,括号内需要元组来定义生成几行几列,比如这里(3,4),注意不用少了小括号
import numpy as np
a=np.zeros((3,4))
print(a)
运行结果:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
生成全部为1的矩阵,ones()
import numpy as np
a=np.ones((3,4),dtype=np.int16)
print(a)
运行结果:
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
生成全部为2的矩阵,直接在上面矩阵的基础上乘上2
import numpy as np
a=np.ones((3,4),dtype=np.int16)*2
print(a)
运行结果:
[[2 2 2 2]
[2 2 2 2]
[2 2 2 2]]
4.empty()
随机生成矩阵,数字接近于0,注意括号内也是需要元组
import numpy as np
a=np.empty((3,4))
print(a)
运行结果:
[[6.01347002e-154 7.13147307e+252 7.29542036e+175 9.49697009e-095]
[2.29621239e+155 1.72979452e+156 5.86300898e-101 1.20270795e-153]
[8.90301763e+247 6.01346953e-154 7.48960144e+247 4.47590761e-091]]
5.利用arange()
函数生成一维数组,形式是arange(m,n,k)
,从m显示到n,然后是以k为间隔的,左取右不取,n是不取的。
import numpy as np
a=np.arange(10,20,2) #2表示间隔为2
print(a)
运行结果:
[10 12 14 16 18]
arange(12)默认0-12,间隔为1
import numpy as np
a=np.arange(12)
print(a)
运行结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
6.利用reshape(m,n)
将一维数组转换为多维数组,指定生成m行n列的矩阵,这里特别说明一下可以用reshape((m,n))也可以把里面的括号去掉,不用元组形式也可以,不会报错。
①指定生成几行几列矩阵
import numpy as np
a=np.arange(12).reshape(3,4)
print(a)
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
②reshape(m,-1)
与reshape(-1,m)
reshape(m,-1)是将数组转化成m行,不知道多少列
reshape(-1,m)是将数组转化成m列,不知道多少行
import numpy as np
a=np.arange(16).reshape(2,8)
print(a)
print(np.arange(16).reshape(4,-1)) #列数自动计算为col=16/4=4
print(np.arange(16).reshape(8,-1)) #列数自动计算为col=16/8=2
print(np.arange(16).reshape(10,-1)) #由于col=16/10!=int,结果报错
运行结果:
[[ 0 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14 15]]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]] #自动计算为4列
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]
[12 13]
[14 15]] #自动计算为2列
7.repeat(x,n)
函数
最简单的形式repeat(x,n)的意思是重复数字x,重复n次形成一维数组
,具体看例子np.repeat(3,4);
当指定axis=0时,则逐行操作,增加行数,axis=0时则增加列数;
当x为数组时,则又会产生不同的情况,具体看例子
import numpy as np
print(np.repeat(3, 4)) #最简单的形式
x = np.array([[1,2],[3,4]])
print(x)
print(np.repeat(x, 3)) #没有axis,只会变成一维数组
print(np.repeat(x, 3, axis=1)) #增加列数
print(np.repeat(x, 3, axis=0)) #增加行数
print(np.repeat(x,[1,2], axis=0)) #增加行数,分别为一次和两次
运行结果:
[3 3 3 3] #np.repeat(3,4)的结果
[[1 2]
[3 4]] #数组x
[1 1 1 2 2 2 3 3 3 4 4 4] # 没有限定axis
[[1 1 1 2 2 2]
[3 3 3 4 4 4]] #axis=1表示逐列
[[1 2]
[1 2]
[1 2]
[3 4]
[3 4]
[3 4]] #axis=1表示逐列
[[1 2]
[3 4]
[3 4]]
8.numpy模块中random模块的常见函数,
①random.random((m,n))
表示随机生成m行n列的矩阵,数字是0-1之间的浮点数
②random.randint(x,size=(m,n))
是用size指定生成几行几列的矩阵,数子是0-x之间的整数
import numpy as np
print(np.random.random((2,3))) #直接用元组形式指定几行几列
print(np.random.randint(10,size=(2,3))) #用size指定几行几列
运行结果:
[[0.81779566 0.02860575 0.86313598]
[0.17711258 0.1565987 0.63166456]]
[[7 1 5]
[3 1 5]]
9.利用flatten()
函数将多维数组转换为一维数组
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=a.flatten()
print(a)
print(b)
运行结果:
[[1 2 3]
[4 5 6]]
[1 2 3 4 5 6] #变成一维数组辽
10.利用linspace()
函数生成的也是一维数组,形式是arange(m,n,k),表示把m-n分割成k个点显示。
import numpy as np
a=np.linspace(1,10,5)
print(a)
运行结果:
[ 1. 3.25 5.5 7.75 10. ]
然后利用reshape((m,n))生成二维数组,指定几行几列
import numpy as np
a=np.linspace(1,10,6).reshape((2,3))
print(a)
运行结果:
[[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
好啦,关于numpy模块基础知识的介绍就先到这里啦~后期会持续更新的哟,欢迎大家提出问题一起学习!
我主要针对的学习对象是刚入门学习python数据分析的小伙伴哟,如果觉得对你有一点点帮助的话就点个赞呗,还可以关注我,后期可以一起学习讨论。
``