关于Numpy多维数组切片的方法及注意事项

1. 多维数组的切片

定义Numpy的一个多维数组

import numpy as np
ArrOne = np.arange(20).reshape(4,5)
# np.arange(20),生成0-19,20长一维向量,通过reshape变成4*5的二维数组
print("ArrOne ->> ", '\n', ArrOne)
print("ArrOne的维度 ->> " , ArrOne.shape)

输出如下:
在这里插入图片描述
假如我们要取出红框中的元素
在这里插入图片描述
红框中的数据是矩阵ArrOne第2,3行与第2,3,4列包围的数据.,使用两种方法取出数据:

RedBoxArr_1 = ArrOne[1:3, 1: 4]
RedBoxArr_2 = ArrOne[1: 3, :][:, 1: 4] #前一个冒号可以省略,后一个不能
print("RedBoxArr_1 ->> ", '\n', RedBoxArr_1)
print('ArrOne[1: 3]','\n', ArrOne[1: 3])
print("RedBoxArr_2 ->> ", '\n', RedBoxArr_2)
## RedBoxArr_2等价于:
## a = ArrOne[1: 3]
## RedboxArr_2 = a[1: 4]

输出如下
在这里插入图片描述
可以看到用这两种方法都可以实现多维数组的切片。

2. 注意事项

要注意:从多维数组中取出某一列,造成的维度变化
在这里插入图片描述
如要取出ArrOne第2行的元素,代码阐述:

GreeBoxArr_1 = ArrOne[1]
GreeBoxArr_2 = ArrOne[1:2]
# 我们看看有什么区别
print('GreeBoxArr_1', '\n', GreeBoxArr_1, '\n')
print('GreeBoxArr_2','\n',  GreeBoxArr_2, '\n')
print('GreeBoxArr_1\'s shape', '\n', GreeBoxArr_1.shape, '\n')
print('GreeBoxArr_2','\n',  GreeBoxArr_2.shape, '\n')

输出结果如下:
在这里插入图片描述
我们看到这两种方式都取出了ArrOne第2行的元素。但是用第一种取出的只有一个维度。而用第二种方法取出的有两个维度。在进行矩阵运算时一定要注意这两者取值的差异。
结论:Arr[1:2],Arr[:, 1:2]等方式切片能够保持矩阵维度在2维(取决Arr本身的维度),而用Arr[1], Arr[:, 1]方式切片不能够维持原本的矩阵维度。
计算demo:

ArrTwo = np.arange(5).reshape(5, 1)
ArrThree = np.arange(5).reshape(1, 5)
ResultOfGreeBox1_1 = np.matmul(ArrTwo, GreeBoxArr_1)
ResultOfGreeBox1_2 = np.matmul(ArrThree, GreeBoxArr_1)
ResultOfGreeBox2_1 = np.matmul(ArrTwo, GreeBoxArr_2)
ResultOfGreeBox2_2 = np.matmul(ArrThree, GreeBoxArr_2)
print('ResultOfGreeBox1_1', '\n', ResultOfGreeBox1_1, '\n')
print('ResultOfGreeBox1_2','\n',  ResultOfGreeBox1_2, '\n')
print('ResultOfGreeBox2_1', '\n', ResultOfGreeBox2_1, '\n')
print('ResultOfGreeBox2_2','\n',  ResultOfGreeBox2_2, '\n')

可以看到ResultOfGreeBox1_1出现了维度异常错误
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值