概述
本篇主要介绍numpy中的数组操作:
- 数组的索引、切片
- 多维数组的基本操作
1.数组的索引、切片
数组索引、切片主要有以下三个特点:
①数组索引从0开始
②可以反向索引
③可以对每一个维度都可以进行切片
'''数组下标从0开始,指的任意维度,下标都从0开始'''
a = np.array([[1, 2], [5, 6]])
a
'''
array([[1, 2],
[5, 6]])
'''
print(a[0,0] ) # 访问a数组第0行第0列元素 1
a[0,0] =2 #修改a数组第0行第0列元素值为2
a
'''
array([[2, 2],
[5, 6]])
'''
'''数组下标支持反向索引,指任意维度最后元素-1,依次反向索引'''
print(a[0,-1]) # 访问a数组第0行第-1(即正向索引第1列)元素 2
'''数组切片 数组切片方式与列表相同,即在某一维度上进行切片'''
# 正态生成4行5列的二维数组
arr = np.random.normal(1.75, 0.1, (4, 5))
print(arr)
'''
[[1.79298767 1.91415977 1.53111211 1.78351471 1.77301072]
[1.64799994 1.96470888 1.74782748 1.75591085 1.65585861]
[1.83204328 1.79612227 1.73520328 1.85348431 1.7278858 ]
[1.90285654 1.85058937 1.62209023 1.5908711 1.71462305]]
'''
# 截取第1至2行的第2至3列(从第0行算起)缺省默认全部留下
after_arr = arr[1:3, 2:4]
print(after_arr)
'''
[[1.74782748 1.75591085]
[1.73520328 1.85348431]]
'''
#截取第2列至第3列的所有行
after_arr = arr[:, 2:4]
'''
array([[1.53111211, 1.78351471],
[1.74782748, 1.75591085],
[1.73520328, 1.85348431],
[1.62209023, 1.5908711 ]])
'''
#截取第1行至第三行的所有列
after_arr = arr[1:3, ]
'''
array([[1.64799994, 1.96470888, 1.74782748, 1.75591085, 1.65585861],
[1.83204328, 1.79612227, 1.73520328, 1.85348431, 1.7278858 ]])
'''
#通过数组切片修改数组元素
a = np.array([[1, 2], [5, 6]])
a[0,:]=[1,1] # a 第0行修改为 [1,1]
a
'''
array([[1, 1],
[5, 6]])
'''
a = np.array([[1, 2], [5, 6]])
a[:,1]=[2,2] # a 第1列修改为 [1,1]
a
'''
array([[1, 2],
[5, 2]])
'''
2.多维数组的基本操作
将会介绍以下基本操作:
1.数组的数学运算(操作不同类型的多维数组时,结果自动转换为精度更高类型的数组):+、-、 /、 ** 、二元运算符、 * :元素点乘、矩阵乘法 dot
+、-、/、** :这几类操作是对数组中的元素进行直接的加、减、除、求幂操作,支持对整个数组或者部分数组元素进行操作
二元运算符:也是对数组中的元素进行直接的+=、-=、/=操作,并将结果赋值回原数组,支持对整个数组或部分数组元素进行操作
如:
# 创建数组
a = np.array([[1, 2], [5, 6]])
'''
array([[1, 2],
[5, 6]])
'''
a+3 #对数组a中的所有元素进行+3操作
'''
array([[4, 5],
[8, 9]])
'''
a[0,0]+3 #对数组a的第0行第0列进行+3操作
'''
4
'''
a*3 #对数组a中的所有元素进行*3操作
'''
array([[ 3, 6],
[15, 18]])
'''
a/3 #对数组a中的所有元素进行/3操作
'''
array([[0.33333333, 0.66666667],
[1.66666667, 2. ]])
'''
a
'''
array([[1, 2],
[5, 6]])
'''
a ** 2 #对数组a中的所有元素进行求幂操作
'''
array([[ 1, 4],
[25, 36]], dtype=int32)
'''
#二元运算符
a = np.array([[1, 2], [5, 6]])a+=3
a
'''
array([[4, 5],
[8, 9]])
'''
a[1,1]+=1
a
'''
array([[ 4, 5],
[ 8, 10]])
'''
元素点乘:*
# 创建数组
a = np.array([[1, 2], [5, 6]])
# 多维数组
b = np.array([[1, 2], [5, 6]])
print(a)
'''
[[1 2]
[5 6]]
'''
print(b)
'''
[[1 2]
[5 6]]
'''
c = a * b #数组a与数组b进行元素点乘
print(c)
'''
[[ 1 4]
[25 36]]
'''
#进行点乘的数组,维数信息需要可以进行元素内积,否则提示错误信息
b = np.array([[1, 2,1], [5, 6,7]])
a*b
'''
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,2) (2,3)
'''
矩阵乘法 dot:
numpy官方文档上所写:
如果 a 和 b都是 1-D arrays,它的作用是计算内积。(不进行复共轭)
np.dot(3, 4) # 12
np.dot([2, 3], [2, 3]) # 13
如果 a 和 b 是 2-D arrays, 作用是矩阵的乘积, a 和 b的维数要满足矩阵乘积维数要求,此时推荐使用 a @ b 。
a = [[1, 0], [0, 1]
b = [[4, 1], [2, 2]]
np.dot(a, b)
'''
array([[4, 1],
[2, 2]])
'''
如果 a 或 b 是 0-D (标量), 等价于数组点乘,推荐使用 numpy.multiply(a, b)或 a * b。
np.dot(2,3) # 6
如果 a 是 N-D array 且 b 是 1-D array, 作用是在a 和 b的最后一个轴上进行sum product运算。
a = np.array([[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]],
[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]]])
b = np.array([1,2,3,4])
np.dot(a, b)
'''
array([[ 30., 70., 110.],
[ 30., 70., 110.]])
'''
# 创建数组
a = np.array([[1, 2], [5, 6]])
# 多维数组
b = np.array([[1, 2], [5, 6]])
print(a)
'''
[[1 2]
[5 6]]
'''
print(b)
'''
[[1 2]
[5 6]]
'''
d = np.dot(a, b) #数组a与数组b进行矩阵乘法,最后的结果存入d中
print(d)
'''
array([[11, 14],
[35, 46]])
'''
2.转置
使用 numpy的transpose方法,完成数组转置
语法格式:numpy.transpose(array)
#一维数组转置
arr = np.arange(6)
print(arr)
'''
[0, 1, 2, 3, 4, 5]
'''
print(np.transpose(arr))
'''
[0, 1, 2, 3, 4, 5]#一维还是一维…
'''
#二维数组转置
arr = np.arange(6).reshape((2,3))
print(arr)
'''
[[0, 1, 2],
[3, 4, 5]]
'''
print(np.transpose(arr))
'''
[[0,3],
[1,4],
[3,5]]
'''
3.条件运算
对数组中的元素进行条件运算,输出元素相应的bool数组,可以用于筛选数组元素,对指定范围数组元素进行修改等。
如:将数组中大于0.5的值置为0
arr = np.random.rand(5,5) # 5x5的随机数组
arr
'''
array([[0.10158289, 0.24435586, 0.63083734, 0.97459745, 0.64882868],
[0.43441076, 0.92342304, 0.05077939, 0.3391776 , 0.50852469],
[0.08768648, 0.57992711, 0.83834858, 0.97962452, 0.55448346],
[0.42689988, 0.36140115, 0.77588118, 0.36685161, 0.83965068],
[0.70111686, 0.18487657, 0.2525437 , 0.86080893, 0.69806511]])
'''
mask = arr>0.5 # 生成数组中元素大于0.5的元素的bool数组
'''
array([[False, False, True, True, True],
[False, True, False, False, True],
[False, True, True, True, True],
[False, False, True, False, True],
[ True, False, False, True, True]])
'''
arr[mask] = 0 # 将数组中大于0.5的值设为0
'''
array([[0.10158289, 0.24435586, 0. , 0. , 0. ],
[0.43441076, 0. , 0.05077939, 0.3391776 , 0. ],
[0.08768648, 0. , 0. , 0. , 0. ],
[0.42689988, 0.36140115, 0. , 0.36685161, 0. ],
[0. , 0.18487657, 0.2525437 , 0. , 0. ]])
'''
最后
以上就是长情跳跳糖为你收集整理的python机器学习之九 numpy库之数组(数组的索引、切片;多维数组的基本操作)的全部内容,希望文章能够帮你解决python机器学习之九 numpy库之数组(数组的索引、切片;多维数组的基本操作)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复