介绍
NumPy模块是Python的一种开源的数值计算扩展,是一个用python实现的科学计算包,主要包括:
- nddary:具有矢量算术运算和复杂广播能力的多维数组
- ufunc: 对整组数据快速运算的标准数学函数
- 随机生成函数,傅里叶变换,线性代数操作
nddary—Numpy的核心数据结构
- 与标准Python库类是有差别的,array.array只处理一维数组,提供的功能也很少。numpy.array可处以高维数组,功能也较多
- ndarray的大小固定,创建好数组后数组大小是不会再发生改变的
naddary的创建
通过numpy模块中的常用的几个函数进行创建ndarray多维数组对象
- arange函数:接收一个普通的python序列,并将其转换为ndarray
import numpy as np
#创建nddary
#用一维数组创建
a=np.array([1,2,3,4,5])
print(a)
#用元组创建
b=np.array((1,2,3,4,5,6))
print(b)
#多维数组
c=np.array([[1,2,3,4],[5,6,7,8]])
print(c.ndim)#查看维数
d=np.array([[[1,2,3],[2,3,4]],[[3,4,5],[4,5,6]]])
print(d)
[[[1 2 3]
[2 3 4]]
[[3 4 5]
[4 5 6]]]
print(d.ndim) #查看维数 3 有3个大括号
print(d.shape) #每一维的大小 (2,2,3) 第一维中2个元素,第二维中2个元素 第三维中3个元素
print(d.dtype) #元素类型 int32
print(d.size) #元素个数 12
print(d.itemsize) #每个元素所占的字节数 4
- zeros函数:创建指定长度或者形状的全零数组。
e =np.zeros((2,3)) #参数不能为空
print(e)
[[0. 0. 0.]
[0. 0. 0.]]
- ones函数:创建指定长度或者形状的全1数组。
f=np.ones((2,4))
print(f)
[[1. 1. 1. 1.]
[1. 1. 1. 1.]]
- empty函数:创建一个没有任何具体值的数组(准备地说是创建一些未初始化的ndarray多维数组)
g=np.empty((3,1))
print(g)
[[2.45304190e-315]
[2.45318478e-315]
[2.45318494e-315]]
nddary其他的创建方式
- arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值
h=np.arange(8)
print(h) [0 1 2 3 4 5 6 7]
h=np.arange(0,18,2) #步长
print(h) [ 0 2 4 6 8 10 12 14 16]
h=np.arange(18,0,-1)
print(h) [18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1]
- linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值
i=np.linspace(18,0,6) #生成6个元素 等差形式
print(i) [18. 14.4 10.8 7.2 3.6 0. ]
print(help(np.linspace))
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
Return evenly spaced numbers over a specified interval.
- logspace函数:和linspace函数类似,不过创建的是等比数列数组
#0表示10~0 3表示10~3 一共生成4个元素
j=np.logspace(0,3,4)
print(j)
[ 1. 10. 100. 1000.]
- 使用随机数填充数组,即使用numpy.random中的random()函数来创建0-1之间的随机元素,数组包含的元素数量由参数决定
-
uniform 函数原型: numpy.random.uniform(low,high,size)从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high
-
randint: 原型:numpy.random.randint(low, high=None, size=None, dtype=‘l’),产生随机整数;
-
random_integers: 原型: numpy.random.random_integers(low, high=None, size=None),在闭区间上产生随机整数;
-
random_sample: 原型: numpy.random.random_sample(size=None),在[0.0,1.0)上随机采样;
-
random: 原型: numpy.random.random(size=None),和random_sample一样,是random_sample的别名;
-
rand: 原型: numpy.random.rand(d0, d1, …, dn),产生d0 - d1 - … - dn形状的在[0,1)上均匀分布的float型数。
-
randn: 原型:numpy.random.randn(d0,d1,…,dn),产生d0 - d1 - … - dn形状的标准正态分布的float型数。
#参数为形状的小 元素在0~1之间
h=np.random.random((2,2,3))
print(h)
[[[0.87588073 0.94536619 0.90240046]
[0.35536868 0.40900711 0.58219535]]
[[0.66279523 0.79591973 0.37625457]
[0.3967271 0.28329279 0.49097635]]]
j=np.random.randint(1,20,size=(2,2,3))
print(j)
[[[17 15 12]
[14 19 11]]
[[19 10 12]
[11 11 2]]]
如果需要更改一个已经存在的数组的数据类型,可以通过astype方法进行修改从而得到一个新数组。
k=np.array([1,2,3,4,5])
print(k.dtype)
k1=k.astype(float) #或创建 k1=np.array([1,2,3,4,5],dtype=float)
print(k.dtype)
print(k1.dtype)
print(k1)
int32
int32
float64
[1. 2. 3. 4. 5.]
k2=np.array([1,2,3,4,5],dtype=float)
print(k2.dtype)
float64
ndarray修改形状
- 直接修改数组ndarray的shape值, 要求修改后乘积不变。
m=np.random.randint(1,20,size=(2,5))
print(m)
m.shape=(5,2)
print(m)
[[ 8 11 11 3 4]
[ 6 8 5 6 1]]
[[ 8 11]
[11 3]
[ 4 6]
[ 8 5]
[ 6 1]]
- 直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致。
m=np.random.randint(1,20,size=(2,5))
print(m)
m1=m.reshape(10)
print(m1)
#修改m1后 原来的m 也会发生变化
m1[3]=60
print(m1)
print(m)
m> [[16 15]
[16 3]
[10 17]
[ 3 12]
[19 8]]
m1> [16 15 16 60 10 17 3 12 19 8]
m发生变化[[16 15]
[16 60]
[10 17]
[ 3 12]
[19 8]]
- 当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值。
m3=np.random.randint(1,20,size=(2,5))
print(m3)
m3.shape=(5,-1)
print(m3)
[[ 3 8 1 11 14]
[ 9 3 4 18 19]]
[[ 3 8]
[ 1 11]
[14 9]
[ 3 4]
[18 19]]