提问人:Miss_Orchid 提问时间:11/16/2023 更新时间:11/16/2023 访问量:45
Python 矩阵遍历向外扩展同心方块
python matrix traversal expanding outwards concentric squares
问:
假设我有一个 5x5 矩阵,如下所示:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
根据某个位置,我在 (x,y) 坐标中得到了一个索引,我想在其中开始构建值之外的同心正方形。以下是一些示例:
3 3 3 3 3
3 2 2 2 2
3 2 1 1 2
3 2 1 1 2
3 2 2 2 2
2 2 2 3 4
1 1 2 3 4
1 1 2 3 4
2 2 2 3 4
3 3 3 3 4
有没有更自动化的/函数/库可以很容易地做到这一点,而不是对这些类型的值进行硬编码?
答:
1赞
mozway
11/16/2023
#1
不确定确切的逻辑,但假设 ,1s 正方形左上角的坐标,您可以使用 numpy.where 制作一个垂直和水平数组,并将它们与 broadcasting 和 numpy.maximum
组合:x
y
x, y = 2, 2
N = 5
Xs = np.arange(N)-x
Ys = np.arange(N)-y
out = np.maximum(np.where(Xs>0, Xs, 1-Xs)[:, None],
np.where(Ys>0, Ys, 1-Ys)
)
输出:
array([[3, 3, 3, 3, 3],
[3, 2, 2, 2, 2],
[3, 2, 1, 1, 2],
[3, 2, 1, 1, 2],
[3, 2, 2, 2, 2]])
输出 :x = 1 ; y = 0 ; N = 6
array([[2, 2, 2, 3, 4, 5],
[1, 1, 2, 3, 4, 5],
[1, 1, 2, 3, 4, 5],
[2, 2, 2, 3, 4, 5],
[3, 3, 3, 3, 4, 5],
[4, 4, 4, 4, 4, 5]])
中间体 ():x = 5 ; y = 5 ; N = 5
# Xs
array([-2, -1, 0, 1, 2])
# np.where(Xs>0, Xs, 1-Xs)[:, None]
array([[3],
[2],
[1],
[1],
[2]])
# Ys
array([-2, -1, 0, 1, 2])
# np.where(Ys>0, Ys, 1-Ys)
array([3, 2, 1, 1, 2])
评论
0赞
Miss_Orchid
11/16/2023
这看起来很棒。我应该在原来的帖子中提到,但是有没有办法停在某个数字上?例如,如果我仍然有 5x5 网格,但只将同心方块构建为数字 2 或 3 等?
0赞
mozway
11/16/2023
我想你可以剪辑
中间数组或输出。
评论