为什么对二维numpy数组执行array[array%10]索引会返回三维数组?
Numpy高级索引逻辑说明
1. array[array>0]返回一维数组的底层逻辑
array>0会生成一个和原数组形状完全一致的布尔数组(本例中为(10,10)形状),所有元素值为True或False。
Numpy的布尔索引规则为:提取所有布尔值为True的位置对应的原数组元素,按行优先(C顺序)拉平为一维数组返回。本例中原数组元素范围是1~100,所有元素都满足>0的条件,因此最终返回包含全部100个元素的一维数组。
2. array[array%10]返回三维数组的底层逻辑
array%10会生成一个和原数组形状一致的整数数组(本例中为(10,10)形状),每个元素的取值范围是0~9,刚好是原数组第0轴(行维度,长度为10)的合法下标。
Numpy的整数数组索引规则为:当传入一个N维整数数组作为索引时,会将索引数组的每个元素值作为原数组第0轴的下标取值,返回结果的形状为「索引数组的形状 + 原数组被索引维度之后剩余维度的形状」。
本例中索引数组形状为(10,10),原数组被索引的第0轴之后还剩长度为10的列维度,因此最终返回的数组形状为(10,10) + (10,) = (10,10,10),也就是三维数组。
补充:如果你的需求是对原数组每个元素做取模10的计算,直接执行
array%10即可,不需要在外层套array[]索引。
内容的提问来源于stack exchange,提问作者user245699
相关产品推荐
相关产品推荐

