文章目录
- Numpy是什么?
- numpy的安装
- array创建数组
- arange创建数组
- 随机数创建
- 随机数
- 随机整数
- 正太分布
- ndarray 对象
- zeros创建
- ones创建
- empty 创建
- full()创建
- 创建单位矩阵
- linspace创建
- logspace创建
Numpy是什么?
Numpy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy支持向量处理ndarray对象,提高程序运算速度。
numpy的安装
安装 NumPy 最简单的方法就是使用 pip 工具,语法格式如下:
pip install numpy
【示例】arange函数测试环境安装
import numpy as np
a=np.arange(10)
print(a)
# [0 1 2 3 4 5 6 7 8 9]
在上面的程序中只涉及numpy模块中的一个arange函数,该函数可以传入一个整数类型的参数n,函数返回值看着像一个列表,其实返回值类型是numpy.ndarray。这是Numpy中特有的数组类型。如果传入arange函数的参数值是n,那么arange函数会返回0到n-1的ndarray类型的数组。
array创建数组
numpy模块的array函数可以生成多维数组。例如,如果要生成一个二维数组,需要向array函数传递一个列表类型的参数。每一个列表元素是一维的ndarray类型数组,作为二维数组的行。另外,通过ndarray类的shape属性可以获得数组每一维的元素个数(元组形式),也可以通过shape[n]形式获得每一维的元素个数,其中n是
维度,从0开始。
语法格式如下:
numpy.array(object, dtype = None, copy =True, order = None, subok = False, ndmin = 0)
名称 | 描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 对象是否需要复制,可选 |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
【示例】创建一维
b=np.array([1,2,3,4,5,6])
print(b)
print('b数组的维度:',b.shape)
# [1 2 3 4 5 6]
# b数组的维度: (6,)
【示例】创建二维
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print('a数组的维度:',a.shape)
'''
[[1 2 3][4 5 6][7 8 9]]
a数组的维度: (3, 3)
'''
【示例】ndmin参数的使用
# ndmin 指定生成树组的最小维度
a = np.array([1, 2, 3, 4, 5, 6], ndmin=3)
print(a)
# [[[1 2 3 4 5 6]]]
【示例】dtype参数的使用
dtype 数组元素的数据类型,可选
a=np.array([1,2,3,4,5,6],dtype=np.float64)
print(a)
# [1. 2. 3. 4. 5. 6.]
arange创建数组
使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
参数 | 描述 |
---|---|
start | 起始值,默认为0 |
stop | 终止值(不包含) |
step | 步长,默认为1 |
dtype | 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。 |
【示例】arange生成 0 到 5 的数组
x=np.arange(0,6,dtype=int)
print(x)
# [0 1 2 3 4 5]
【示例】arange设置了起始值、终止值及步长
x=np.arange(10,20,2,dtype=float)
print(x)
# [10. 12. 14. 16. 18.]
【示例】arange创建二维数组
# array 内部的数组参数是齐次 数字个数要相同
b=np.array([np.arange(1,4),np.arange(4,7),np.arange(7,10)])
print(b)
print('b数组的维度:',b.shape)
'''
[[1 2 3][4 5 6][7 8 9]]
b数组的维度: (3, 3)
'''
随机数创建
numpy中的random模块包含了很多方法可以用来产生随机数。
函数 | 说明 |
---|---|
seed | 确定随机生成器种子 |
permutation | 返回一个序列的随机排列或返回一个随机排列的范围 |
shuffle | 对一个序列就地随机排列 |
rand | 产生均匀分布的样本值 |
randint | 该方法有三个参数low、high、size三个参数。默认high是None,如果只有low,那范围就是[0,low)。如果有high,范围就是[low,high)。 |
random(size=None) | 该方法返回[0.0, 1.0)范围的随机数。 |
randn(d0,d1,…,dn) | randn函数返回一个或一组样本,具有标准正态分布(期望为0,方差为1)。dn表格每个维度,返回值为指定维度的array |
随机数
返回[0.0, 1.0)范围的随机数
numpy.random.random(size=None)
# 0.17933303422206437
# random 的范围是 0-1 size 表示数据长度维度
x=np.random.random(size=4)
y=np.random.random(size=(3,4))
'''
[0.45032275 0.31021312 0.19896381 0.99494102][[0.80596859 0.94110916 0.46217472 0.94750929][0.54060028 0.0122392 0.92880723 0.77930989][0.44973219 0.75000089 0.65675713 0.56710052]]'''
随机整数
# 该方法有三个参数low、high、size三个参数。默认high是None,如
# 果只有low,那范围就是[0,low)。如果有high,范围就是[low,high)。
print(np.random.randint(5,10,size=(3,4)))
'''
[[5 8 9 8][9 5 6 9][7 7 8 8]]
'''
正太分布
numpy.random.randn(d0,d1,…,dn)
# randn 正态分布 期望 0 方差 1
np.random.randn()
# 2.2092905841484445
np.random.randn(2,4)
'''
array([[ 0.76053265, 0.76429307, -0.92853041, 1.15234324],[ 1.73767927, 0.46951344, -1.41750813, -0.43827678]])
'''
#正太分布(高斯分布)loc:期望 scale:方差 size 形状
print(np.random.normal(loc=3,scale=4,size=(2,2,3)))
'''
[[[ 5.51447166 3.52809296 4.15695566][ 4.52925072 -1.88765851 2.85507012]][[-1.68197538 2.25529222 2.42014443][ 3.83676643 1.47955373 3.63706681]]]
'''
ndarray 对象
ndarray的属性
属性 | 说明 |
---|---|
.ndim | 秩,即轴的数量或维度的数量 |
.shape | ndarray对象的尺度,对于矩阵,n行m列 |
.size | ndarray对象元素的个数,相当于.shape中n*m的值 |
.dtype | ndarray对象的元素类型 |
.itemsize | ndarray对象每个元素的大小,以字节为单位 |
Numpy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
x = np.random.randint(10,size=6)
y = np.random.randint(10,size=(3,4))
z = np.random.randn(3,4,5)
print("ndim属性",x.ndim,y.ndim,z.ndim)
print("shape属性",x.shape,y.shape,z.shape)
print("size属性",x.size,y.size,z.size)
print("dtype属性",x.dtype,y.dtype,z.dtype)
print("itemsize属性",x.itemsize,y.itemsize,z.itemsize)
'''
ndim属性 1 2 3
shape属性 (6,) (3, 4) (3, 4, 5)
size属性 6 12 60
dtype属性 int32 int32 float64
itemsize属性 4 4 8
'''
zeros创建
创建指定大小的数组,数组元素以 0 来填充
numpy.zeros(shape, dtype = float, order ='C')
x = np.zeros(5)
print(x) # [0. 0. 0. 0. 0.]
# 设置类型为整数
y = np.zeros((5,), dtype=int)
print(y) # [0 0 0 0 0]
z = np.zeros((2, 2))
print(z)
'''
[[0. 0.][0. 0.]]
'''
zeros_like:根据传入的数组形状创建全为0的数组
【示例】zeros_like的使用
n3 = np.zeros_like(z)
'''
[[0. 0.][0. 0.]]
'''
ones创建
方法与zeros创建方法相同(不做示范)
创建指定大小的数组,数组元素以 1来填充
numpy.ones(shape, dtype = None, order = 'C')
empty 创建
创建一个指定形状(shape)、数据类型(dtype)且未初始化的数
组,里面的元素的值是之前内存的值:
x=np.empty([3,2],dtype=int)
y = np.empty_like(x)
'''
[[25895968444448860 31525592532385860][31244169099083897 13792492908183662][29555336417116208 140720308486242]][[140721260162384 140721260200480][140721260200928 140721260061376][140721260200960 140721260004720]]
'''
【示例】empty创建数组的使用
# y输出随机的十个整数
y = np.empty(10, dtype=int)
print(y)
'''
[25895968444448860 22518393277644868 32932950239150181 3039969262495345432370017465139305 12666807751278697 30118247716159600 3237005612017264130681274979844188 30399692629672048]
'''
x = np.arange(5)
print(x) # [0 1 2 3 4]
# 将x中的元素都加上2 再存放到y的前五个数中
print(np.add(2, x, out=y[:5])) # [2 3 4 5 6]
print(y[:10])
'''
[ 2 3 4 56 12666807751278697 30118247716159600 3237005612017264130681274979844188 30399692629672048]
'''
full()创建
创建全为某个指定值的数组
full(shape,fill_value)
【示例】full的使用
a = np.full((2,2),3)
'''
[[3 3][3 3]]
'''
创建单位矩阵
单位矩阵从左上角到右下角的对角线上的元素均为1,除此以外全都
为0。任何矩阵与单位矩阵相乘都等于本身,而且单位矩阵因此独特
性在高等数学中也有广泛应用。
【示例】eye和identity的使用
np.eye(3,dtype=int)
np.identity(4,dtype=int)
'''
效果一样
[[1 0 0][0 1 0][0 0 1]][[1 0 0][0 1 0][0 0 1]]
'''
linspace创建
linspace函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
np.linspace(start, stop, num=50,endpoint=True, retstep=False, dtype=None)
参数 | 描述 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值,如果endpoint为true,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 ture 时,数列中中包含stop值,反之不包含,默认是True。 |
retstep | 如果为 True 时,生成的数组中会显示间距,反之不显示。 |
dtype | ndarray 的数据类型 |
【示例】linspace创建等差数列
x=np.linspace(1,10,10)
# [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
【示例】linspace创建等差数列endpoint 设为 true
# endpoint=True 间隔 end-start/(num-1)
x=np.linspace(10,20,5,endpoint=True)
# [10. 12.5 15. 17.5 20. ]
# endpoint=False 间隔 end-start/num
x = np.linspace(1,5,num=5,endpoint=False)
# [1. 1.8 2.6 3.4 4.2]
【示例】linspace创建等差数列retstep=True
x=np.linspace(10,20,5,retstep=True)
# (array([10. , 12.5, 15. , 17.5, 20. ]), np.float64(2.5))
logspace创建
logspace 函数用于创建一个于等比数列。格式如下:
np.logspace(start, stop, num=50,endpoint=True, base=10.0, dtype=None)
参数 | 描述 |
---|---|
start | 序列的起始值为:base ** start |
stop | 序列的终止值为:base ** stop。如果endpoint为true,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 ture 时,数列中中包含stop值,反之不包含,默认是True。 |
base | 对数 log 的底数。 |
dtype | ndarray 的数据类型 |
【示例】logspace创建等比数列
x=np.logspace(0,9,10,base=2)
# [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
x = np.logspace(0,3,num=4)
# [ 1. 10. 100. 1000.]