NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
1.数组的属性In [ ]:
import numpy as np
a=np.array([[1,2,3],[1,2,4]],dtype=np.float32)
#数组元素总数
a.size
Out[ ]:
6
In [ ]:
# 数组的形状,多少行多少列
a.shape
Out[ ]:
(2, 3)
In [ ]:
# 数组的维数
a.ndim
Out[ ]:
2
In [ ]:
# 数组中元素类型
a.dtype
Out[ ]:
dtype('float32')
In [ ]:
# 更改数组元素类型
a=np.array([1,2,3],dtype=np.int8)
a.dtype
Out[ ]:
dtype('int8')
2.改变形状
改变数组的形状,这个经常会用到
In [ ]:
# 修改数组形状
a.reshape(3,2)
Out[ ]:
array([[1., 2.],
[3., 1.],
[2., 4.]], dtype=float32)
3.生成特殊数组
顺序数组,等差数组,等比数组,全零数组,全一数组,对角数组
In [ ]:
# 生成从0-9的十个数字
list(range(10))
Out[ ]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [ ]:
np.arange(10)
Out[ ]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [ ]:
#创建等差数组
np.linspace(0,10,10)
Out[ ]:
array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444,
5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])
In [ ]:
# 创建不包含结尾数字的等差数组
np.linspace(0,10,10,endpoint=False)
Out[ ]:
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
In [ ]:
# 创建等比数列
np.logspace(0,10,10,endpoint=False,base=2)
Out[ ]:
array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])
In [ ]:
2**np.linspace(0,10,10,endpoint=False)
Out[ ]:
array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])
In [ ]:
# 生成全0数组
np.zeros(2)
Out[ ]:
array([0., 0.])
In [ ]:
# 生成两行三列的全0数组
np.zeros((2,3))
Out[ ]:
array([[0., 0., 0.],
[0., 0., 0.]])
In [ ]:
# 生成3阶单位数组
np.eye(3)
Out[ ]:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
In [ ]:
# 生成元素值全为1的数组
np.ones(2)
Out[ ]:
array([1., 1.])
In [ ]:
# 生成元素值全为1的数组
np.ones((2,3))
Out[ ]:
array([[1., 1., 1.],
[1., 1., 1.]])
In [ ]:
#生成指定对角线元素值的数组
np.diag([1,3,7])
Out[ ]:
array([[1, 0, 0],
[0, 3, 0],
[0, 0, 7]])
4.生成随机数数组
In [ ]:
# 生成4个随机数
np.random.random(size=4)
Out[ ]:
array([0.99380006, 0.58109084, 0.42882938, 0.07277003])
In [ ]:
# 生成随机数数组
np.random.random(size=(2,3))
Out[ ]:
array([[0.34564092, 0.45134545, 0.38735849],
[0.38139285, 0.91636466, 0.85725663]])
In [ ]:
# 生成4个均匀分布的随机数
np.random.rand(2,3,2)
Out[ ]:
array([[[0.05311698, 0.76746714],
[0.85221954, 0.89683859],
[0.16683139, 0.9991075 ]],
[[0.43788693, 0.8984444 ],
[0.86345445, 0.74366691],
[0.02199102, 0.95883056]]])
In [ ]:
# 生成正态分布的随机数
np.random.randn(2,3,2)
Out[ ]:
array([[[ 0.3403313 , 0.62020657],
[ 2.2423117 , -0.05473819],
[-0.07679334, -0.01406795]],
[[ 1.62656454, 0.68541225],
[-0.42121934, 0.09347002],
[-0.30088079, -0.08401791]]])
In [ ]:
# 随机生成0-10之间的2行3列随机数
np.random.randint(0,10,size=(2,3))
Out[ ]:
array([[7, 5, 6],
[8, 3, 6]])
5.索引与切片
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
In [ ]:
# 一维数组的索引
a=np.arange(10)
a
Out[ ]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [ ]:
# 数组的第三个值
a[2]
Out[ ]:
2
In [ ]:
#数组从第三个值之后的值
a[2:]
Out[ ]:
array([2, 3, 4, 5, 6, 7, 8, 9])
In [ ]:
#数组第六个值之前的值
a[:5]
Out[ ]:
array([0, 1, 2, 3, 4])
In [ ]:
#数组从第二个值到最后一个值
a[1:-1]
Out[ ]:
array([1, 2, 3, 4, 5, 6, 7, 8])
In [ ]:
#数组从第二个值到最后一个值,其间步长为2
a[1:-1:2]
Out[ ]:
array([1, 3, 5, 7])
In [ ]:
# 多维数组的索引
b=np.random.randint(0,10,size=(2,3))
b
Out[ ]:
array([[0, 3, 6],
[2, 8, 0]])
In [ ]:
# 输出第二行所有元素
b[1,:]
Out[ ]:
array([2, 8, 0])
In [ ]:
#输出第一列所有元素
b[:,0]
Out[ ]:
array([0, 2])
In [ ]:
#???
b[:,::2]
Out[ ]:
array([[0, 6],
[2, 0]])
6.展开
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:修改数组形状,翻转数组,修改数组维度,连接数组,分割数组,数组元素的添加与删除
In [ ]:
# 展开多维数组变为一维数组
b.ravel()
Out[ ]:
array([0, 3, 6, 2, 8, 0])
7.拼接
In [ ]:
#拼接数组
a=np.arange(10).reshape(2,5)
b=np.linspace(0,1,endpoint=False,num=10).reshape(2,5)
In [ ]:
#横向拼接法一
np.vstack((a,b))
#横向拼接法二
np.concatenate((a,b),axis=0)
Out[ ]:
array([[0. , 1. , 2. , 3. , 4. ],
[5. , 6. , 7. , 8. , 9. ],
[0. , 0.1, 0.2, 0.3, 0.4],
[0.5, 0.6, 0.7, 0.8, 0.9]])
In [ ]:
#纵向拼接法一
np.vstack((a,b))
#纵向拼接法二
np.concatenate((a,b),axis=1)
Out[ ]:
array([[0. , 1. , 2. , 3. , 4. , 0. , 0.1, 0.2, 0.3, 0.4],
[5. , 6. , 7. , 8. , 9. , 0.5, 0.6, 0.7, 0.8, 0.9]])
In [ ]:
a=np.arange(36).reshape(6,6)
a
Out[ ]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35]])
8.分割
In [ ]:
#横向分割数组法一
np.hsplit(a,3)
#横向分割数组法二
np.split(a,3,axis=1)
Out[ ]:
[array([[ 0, 1],
[ 6, 7],
[12, 13],
[18, 19],
[24, 25],
[30, 31]]),
array([[ 2, 3],
[ 8, 9],
[14, 15],
[20, 21],
[26, 27],
[32, 33]]),
array([[ 4, 5],
[10, 11],
[16, 17],
[22, 23],
[28, 29],
[34, 35]])]
In [ ]:
#纵向分割数组法一
np.vsplit(a,3)
#横向分割数组法二
np.split(a,3,axis=0)
Out[ ]:
[array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]]),
array([[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]]),
array([[24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35]])]
9.参考文章
菜鸟教程-Numpy
【创作不易,望点赞收藏,若有疑问,请留言,谢谢】