2 条题解
-
0
NUMPY019 题解:棋盘矩阵
题目
创建 棋盘矩阵,左上角为 0,黑白相间。
示例(n=4):
[[0 1 0 1] [1 0 1 0] [0 1 0 1] [1 0 1 0]]
代码
import numpy as np n = int(input()) Z = np.zeros((n, n), dtype=int) Z[1::2, ::2] = 1 Z[::2, 1::2] = 1 print(Z)
代码详解
第一步:创建全0矩阵
Z = np.zeros((n, n), dtype=int)第二步:填充奇偶位置
Z[1::2, ::2] = 1 # 奇数行、偶数列 Z[::2, 1::2] = 1 # 偶数行、奇数列图解(n=4):
列: 0 1 2 3 行 0: 0 1 0 1 ← 偶行奇列设为1 行 1: 1 0 1 0 ← 奇行偶列设为1 行 2: 0 1 0 1 行 3: 1 0 1 0
切片步长详解
切片 含义 示例 (n=4) ::2从0开始,步长2 [0, 2] 1::2从1开始,步长2 [1, 3] ::全部 [0, 1, 2, 3]
方法2:利用行列索引之和
import numpy as np n = int(input()) Z = np.zeros((n, n), dtype=int) for i in range(n): for j in range(n): if (i + j) % 2 == 1: Z[i, j] = 1 print(Z)原理:当 i+j 为奇数时,设置为 1。
方法3:一行代码(详解)
import numpy as np n = int(input()) Z = (np.arange(n) + np.arange(n)[:, None]) % 2 print(Z)这个方法比较难懂,一步步拆开看:
第一步:创建行向量
np.arange(n) # n=4 时,结果:[0, 1, 2, 3]第二步:创建列向量
np.arange(n)[:, None] # [:, None] 把一维数组变成列向量(n×1) # 结果: # [[0] # [1] # [2] # [3]]第三步:广播相加
np.arange(n) + np.arange(n)[:, None] # 行向量 [0,1,2,3] 会广播到每一列 # 列向量会广播到每一行 # 结果: # [[0+0, 1+0, 2+0, 3+0], [0, 1, 2, 3] # [0+1, 1+1, 2+1, 3+1], = [1, 2, 3, 4] # [0+2, 1+2, 2+2, 3+2], [2, 3, 4, 5] # [0+3, 1+3, 2+3, 3+3]] [3, 4, 5, 6]第四步:取模2
% 2 # [0, 1, 2, 3] % 2 = [0, 1, 0, 1] # [1, 2, 3, 4] % 2 = [1, 0, 1, 0] # [2, 3, 4, 5] % 2 = [0, 1, 0, 1] # [3, 4, 5, 6] % 2 = [1, 0, 1, 0]图解
广播相加: 列: 0 1 2 3 行 0: [0 1 2 3] 行 1: + [1 2 3 4] ← 广播 行 2: [2 3 4 5] 行 3: [3 4 5 6] 取模2后: 列: 0 1 2 3 行 0: [0 1 0 1] 行 1: [1 0 1 0] 行 2: [0 1 0 1] 行 3: [1 0 1 0]广播原理
np.arange(n)是 (4,) 形状的行向量np.arange(n)[:, None]是 (4,1) 形状的列向量- 相加时,行向量会复制到4行,列向量会复制到4列
核心知识点
知识点 说明 np.zeros()创建全0矩阵 dtype=int指定整数类型 切片 [::2]步长为2 [:, None]转成列向量 广播 自动扩展维度进行运算 -
0
NUMPY019 题解:棋盘矩阵
题目
创建 棋盘矩阵,左上角为 0,黑白相间。
示例(n=4):
[[0 1 0 1] [1 0 1 0] [0 1 0 1] [1 0 1 0]]
代码
import numpy as np n = int(input()) Z = np.zeros((n, n), dtype=int) Z[1::2, ::2] = 1 Z[::2, 1::2] = 1 print(Z)
代码详解
第一步:创建全0矩阵
Z = np.zeros((n, n), dtype=int)第二步:填充奇偶位置
Z[1::2, ::2] = 1 # 奇数行、偶数列 Z[::2, 1::2] = 1 # 偶数行、奇数列图解(n=4):
列: 0 1 2 3 行 0: 0 1 0 1 ← 偶行奇列设为1 行 1: 1 0 1 0 ← 奇行偶列设为1 行 2: 0 1 0 1 行 3: 1 0 1 0
切片步长详解
切片 含义 示例 (n=4) ::2从0开始,步长2 [0, 2] 1::2从1开始,步长2 [1, 3] ::全部 [0, 1, 2, 3]
其他实现方法
方法2:利用行列索引之和
import numpy as np n = int(input()) Z = np.zeros((n, n), dtype=int) for i in range(n): for j in range(n): if (i + j) % 2 == 1: Z[i, j] = 1 print(Z)方法3:一行代码
import numpy as np n = int(input()) Z = (np.arange(n) + np.arange(n)[:, None]) % 2 print(Z)
核心知识点
知识点 说明 np.zeros()创建全0矩阵 dtype=int指定整数类型 切片 [::2]步长为2 1::2从索引1开始,步长2
- 1
信息
- ID
- 465
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 2
- 已通过
- 1
- 上传者