实例:Create a 8x8 matrix and fill it with a checkerboard pattern(创建一个8x8的棋盘式矩阵)
import numpy as np
z = np.zeros((8,8))
z[1::2,::2] = 1
[[0 0 0 0 0 0 0 0]
[1 0 1 0 1 0 1 0]
[0 0 0 0 0 0 0 0]
[1 0 1 0 1 0 1 0]
[0 0 0 0 0 0 0 0]
[1 0 1 0 1 0 1 0]
[0 0 0 0 0 0 0 0]
[1 0 1 0 1 0 1 0]]
上面实现的是矩阵中从第‘1’行开始每隔一行,从第‘0’列开始,每隔1列 赋值为1
import numpy as np
z = np.zeros((8,8))
z[::2,1::2] = 1
[[0 1 0 1 0 1 0 1]
[0 0 0 0 0 0 0 0]
[0 1 0 1 0 1 0 1]
[0 0 0 0 0 0 0 0]
[0 1 0 1 0 1 0 1]
[0 0 0 0 0 0 0 0]
[0 1 0 1 0 1 0 1]
[0 0 0 0 0 0 0 0]]
上面实现的是矩阵中从第‘0’行开始每隔1行,从第‘1’列开始,每隔1列 赋值为1
将上面两个操作合起来,我们将得到一个棋盘式的8x8矩阵:
import numpy as np
z = np.zeros((8,8))
z[1::2,::2] = 1
z[::2,1::2] = 1
[[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]]
关键理解点: z[1::2,::2] = 1 表达中’1:‘要从索引1行开始切片,如果是’1:n’则表示从索引1行到索引n行,如果是’1::2’,则表示从索引1行到最后一行,每2行进行切片,对列进行切片时也是相同的处理。
总结:不同维度用逗号隔开,取切片要用冒号,多维数组取步长要用冒号
参考:
1.菜鸟教程:https://www.runoob.com/numpy/numpy-ndexing-and-slicing.html
2.廖雪峰:https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856
3.CSDN:https://blog.csdn.net/brucewong0516/article/details/79186126?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2