接着0-python-numpy说
一.Numpy的访问数组元素
(一).索引
1.符号索引
索引格式 更多样 可以是 np直接+列表 Eg: a[0,0] 结果上 等同 a[0][0]
当然两种访问方式自然是有区别的
对于a[0,0] 你是直接索引第 0 行第 0 列 返回结果
但对于 a[0][0] 是先返回 a[0]的索引结果构成一个 内部列表 或者 子数组,然后继续索引内部列表里面的 [0]
对比这两个的访问过程,不难看出,其实a[0][0]是蛮消耗性能的
所以一般对于已确定 np.ndim 的np 推荐使用第一种
第二钟当 np.ndim 不确定时可以配合 try语句 递归索引数据
Eg:
def serch(arr):
try:
arr = arr[0]# 注意这一步,如果索引失败 直接退出 就不会赋值给arr所以最后返回的是 输入的arr,不是索引到的
return serch(arr)#注意 这里用了递归 递归时要注意 函数 最终 返回的结果为第一次执行的返回
except:
return arr
但是从a[0][0]可得出我们可以用
a[0] 返回 (np.ndim - 1)维列表 的索引
2.切片索引
索引格式:
M[lower:upper:step]
目的:访问一段连续 或 间断有序 的数据
注意 切片索引不能连续切片,
原因:对于np.ndim 维数据切片索引完后 维度数 不变
即a[0:1] 返回 np.ndim 维列表的索引
如果直接赋值会把里面所有元素都赋为该值
给一个列表则该列表必须和索引内容的格式一样,否则报错
所以: a[0:2][0:2] 不可以访问到一个 二维数组 而是该数组的 下一维数组 的 前2个元素
补充:额外的索引 a[-1] 代表 倒数第一个元素,以此类推
注意: 数组的大小,别超了
3.花式索引
一般用法:d = (m*2)<2 #其中(m*2)<2是d判断的条件 m为一个数组 //d会生成一个和 m 数组一样的数组,类型为bool的数组,值就为 该位置的值是否满足d判断的条件
print(m[d]) #将值为 True 的所有值返回 构成一个一维列表
目的:访问满足条件的某些数据
还有一种方式来获取 上述d的位置 indices = np.where(d)
若 m 为一个二维数组
为一个np.ndim维的列表 Eg: indices[0]为x,indices[1]为y以此类推