gpt4 book ai didi

python - 使用 NumPy 填充形状/轮廓

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:36 25 4
gpt4 key购买 nike

我想填充满足某些属性的 numpy 矩阵的一部分(可能使用掩码)。即,它是某种形状的矩阵表示,例如,正方形将是:

square =   [0,0,0,0,0;
0,1,1,1,0;
0,1,0,1,0;
0,1,1,1,0]

变成:

s_filled = [0,0,0,0,0;
0,1,1,1,0;
0,1,1,1,0;
0,1,1,1,0]

和圈子:

circle =   [0,0,0,0,0,0;
0,0,1,1,0,0;
0,1,0,0,1,0;
0,0,1,1,0,0]

然后变成:

c_filled = [0,0,0,0,0,0;
0,0,1,1,0,0;
0,1,1,1,1,0;
0,0,1,1,0,0]

仅使用 numpy 而不使用其他外部库是否可能?我想将此函数/算法应用于 300x300 形状。

非常感谢!

最佳答案

np.maximum.accumulate 非常简单,因为我们可以沿着从左到右然后从右到左的行使用一次,并通过减法简单地获得非零的公共(public)区域。这对于凸形非常有用。

因此,一个实现将是 -

def fill_contours(arr):
return np.maximum.accumulate(arr,1) & \
np.maximum.accumulate(arr[:,::-1],1)[:,::-1]

这是在任意形状上运行的示例 -

In [176]: arbitrary
Out[176]:
array([[0, 0, 1, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0],
[1, 0, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 1, 0, 0],
[0, 0, 1, 0, 0, 1, 0],
[0, 1, 0, 0, 1, 0, 0],
[0, 1, 1, 1, 0, 0, 0]])

In [177]: fill_contours(arbitrary)
Out[177]:
array([[0, 0, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 0, 0, 0]])

关于python - 使用 NumPy 填充形状/轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com