- 缺失索引:提供的索引少于轴的数量,因此被认为是完整切片。
- Numpy支持用”…“表示剩余的轴。eg:N有5个轴
- N[1,...]⇎N[1,:,:,:,:]
- N[...,3]⇎N[:,:,:,:,3]
- N[1,...,3,:]⇎N[1,:,:,3,:]
- 访问数组元素:下标、切片、循环数组共3种方式。
arr = np.arange(10)
print(arr)
print("通过下标选择元素:", arr[5])
print("通过切片选择元素:", arr[3:8])
print("通过切片设置步长选择元素:", arr[::2])
print("循环数组:")
for item in arr:
print("当前元素是:", item * 5)
a = np.arange(10) * 2
print("原始数组:", a)
b = np.array([1, 1, 3, 4])
print("通过b索引的数据:", a[b])
c = np.array([[2, 3], [5, 6]])
print("通过c索引的数据:", a[c])
a = np.arange(8).reshape(2, 4)
print("原始数组a:", a)
b = a > 4
print("新的布尔数组b:", b)
print("使用布尔数组进行筛选:", a[b])
a = np.arange(10).reshape(2, 5)
print(a)
b = np.ix_([0, 1], [2, 3])
print("使用整数数组筛选数据:", a[b])
c = np.ix_([True, True], [1, 3])
print("使用布尔数组筛选数据:", a[c])
def get_rows(t):
print('取一行')
print(t[3])
print(t[3, :])
print('---------------------')
print('某行开始到结尾')
print(t[3:])
print(t[3:, :])
print('---------------------')
print('某行开始到某行结束')
print(t[1:4])
print(t[1:4, :])
print('---------------------')
print('某行开始到某行结束,有跨度')
print(t[1:4:2])
print(t[1:4:2, :])
print('---------------------')
print('选取指定行')
print(t[[0, 2, 4]])
print(t[[0, 2, 4], :])
print("按第行切片选择指定列:", t[0:3, 2])
print("按行切片选择所有列:", t[0:2, :])
def get_cols(t):
"""
按列切片
"""
print('取一列')
print(t[:, 3])
print('---------------------')
print('某列开始到结尾')
print(t[:, 3:])
print('---------------------')
print('某列开始到某列结束')
print(t[:, 1:4])
print('---------------------')
print('某列开始到某列结束,有跨度')
print(t[:, 1:4:2])
print('---------------------')
print('选取多列')
print(t[:, [0, 2, 4]])
print("按列切片选择所有行:", t[:, 1:3])
- 对多维数组迭代是针对第一个轴完成的。
- 若需要遍历所有元素,需针对轴遍历,访问flag属性。
arr0 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]).reshape(3, 4)
print(arr0)
for row in arr0:
print("按行遍历:")
print(row)
for e in arr0.flat:
print("按元素遍历:", e)