Bootstrap

Python学习:二维数组的切片操作

通俗来讲取一个数组arr[i] 中某一段段元素称为 切片 

一维数组和二维数组相比有区别

import numpy as np

# arr[i:j] 表示片取 ;参数设置是arr[start,end,step]
# 一维数组 切片
arr = np.arange(6)  # [0,1,2,3,4,5]
print(arr[1:2])  # [1] 输出从a[i:j-1] 的值
print(arr[1:3])  # [1 2]
print(arr[:2])  # [0 1] start参数的位置没有值,表示start(i)“缺省”,输出从a[0:j-1] 的值 即i=0
print(arr[2:])  # [2 3 4 5] end参数的位置没有值,表示end(j)“缺省”,输出从a[2:j] 的值

print(arr[::2])  # [0 2 4] i位置被 : 代替,arr[::j] j表示步长,从a[0]开始个j个元素输出
print(arr[1::])  # [1 2 3 4 5] j位置被 : 代替,arr[i::] 表示从i开始,到最后,片取输出

print(arr[::])  # [0 1 2 3 4 5] 输出完整数组
print(arr[...], '\n')

# 二维数组 切片
arr1 = np.arange(9).reshape(3, 3)  # arr1[i:j]
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]
print(arr1[1:2])  # [[3 4 5]] 输出第i行,第j-1列
print(arr1[1:3])
# [[3 4 5]
#  [6 7 8]]

print(arr1[:2])
# [[0 1 2]
#  [3 4 5]] # i 缺省 输出前 j-1行

print(arr1[2:])  # [[6 7 8]] j 缺省 表示输出后i行

print(arr1[::2])
#  [[0 1 2]
#   [6 7 8]] “2”此时表示步长,从第0行开始间隔”2-1“行输出

print(arr1[2::])
#  [[6 7 8]] 从第2行开始输出

print(arr1[1, 0])  # 3
print(arr1[:, 1])  # [1 4 7] 输出第一列
print(arr1[1, :])  # [3 4 5] 输出第一行

print(arr1.mean(axis=1))  # [1. 4. 7.] 计算每行的平均值
print(arr1.mean(axis=0))  # [3. 4. 5.] 计算每列的平均值

print(arr1.argmax())  # 8 获取最大值索引

# 遍历 索引法
for i in range(3):
    for j in range(3):
        print(arr1[i, j])

# 遍历 np.nditer()
for i in np.nditer(arr1):
    print(i)

切片引索维负数时称为负切片:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])  # 从末尾开始的索引 3 到末尾开始的索引 1,对数组进行切片
print(arr[-3:-1])  # [5 6]

二维数组的切片:

import numpy as np
# 片取第一行索引维1到4-1的元素
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) 
print(arr[1, 1:4]) # [7 8 9]

;