import numpy as np
#创建一个一维数组
# arr = np.arange(16)
# print("arr:\n",arr)
# print("arr 的 形状:\n",arr.shape)
# print("arr 的 ndim:\n",arr.ndim)
# 获取单个元素---可以通过下标来访问单个元素
# data = arr[4]
# print("data:\n",data)
# data = arr[-1]
# print("data:\n",data)
# 获取多个元素---可以通过切片来获取,不包含结束位置
# data = arr[4:13:2]
# 如果使用下标形式来获取多个元素,那么需要注意:需要将多个下标组成一个元素传进去--即组成列表
# data = arr[[4,6,8,10,12]]
# print("data:\n",data)
# 二维数组的索引
arr = np.arange(16).reshape((4,4))
print("arr:\n",arr)
print("arr 的 形状:\n",arr.shape)
print("arr 的 ndim:\n",arr.ndim)
# 获取第一行元素
# data = arr [:,0]# 逗号之前代表行,逗号之后代表列,而且这个叫行列同时索引
# data = arr [:,0:1]# 逗号之前代表行,逗号之后代表列,而且这个叫行列同时索引
# print("data:\n",data)
# 获取 0 2 行的 前两列
# data = arr[[0,2],0:2:1]
# data = arr[[0,2],[0,1]] # 这个与上一行结果不同
# 这个是 一一对应去取
# data = arr[[0,2],[0,1,2]] # 错误的,如果这样取值,前后的形状必须一致
# print("data:\n",data)
# data = arr[::2,0:2:1]
# data = arr[[1,2],1:3]
# print("data:\n",data)
# arange 报错 array 是可以的
# arr_mask = np.array([0,1,0,3],dtype=np.bool)
# print(arr_mask)
# # --->[0,1,2,3]--->[False True True True]
# # 利用bool数组进行切片
# data = arr[arr_mask,:] #第0行不见了
# # data = arr[:,arr_mask] # 第0列不见了
# print("data:\n",data)
# bool 数组做索引,False 为丢弃, True 为选择
# 三维 或者多维数组
"""
一维 arr[下标/切片]
二维 arr[行下边或者切片,列下标或者切片]
三维 arr[块下标或者切片,行,列]
四维 arr[堆下标或者切片,块,行,列]
"""
# 注意:
# 如果使用下标,会降维度,如果使用切片,维度不变
# bool数组进行索引的时候,需要索引的是二维数组,那么你的bool数组是一维的,
# bool数组的长度 需要与你要切的维度的长度一致