python - 如何获取条件成立的二维数组分段的开始和结束

标签 python numpy matrix multidimensional-array

给定一个由 1 和 0 组成的二维数组,我需要获取 1 所在的小节的坐标。例如,给定下面定义的数组:

a = [[0, 0, 0, 0],
     [0, 1, 0, 0],
     [0, 0, 1, 0]]

我的函数应该返回开始,其中 1 的分段以 (1,1) 开始,并返回结束,其中 1 的分段以 (2,2) 结束

是否有比使用 numpy 的 for 循环更有效的方法来实现此目的?

最佳答案

灵感来自this post ,这是一种方法 -

def start_end(a):
    m,n = a.shape
    mask = a.astype(bool)

    rowm = mask.any(1)
    colm = mask.any(0)

    r0 = rowm.argmax()
    c0 = colm.argmax()

    r1 = m-rowm[::-1].argmax()-1
    c1 = n-colm[::-1].argmax()-1
    return (r0,c0), (r1,c1)

示例运行 -

In [114]: a # bit more generic case
Out[114]: 
array([[0, 1, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 1, 1]])

In [115]: start_end(a)
Out[115]: ((0, 1), (2, 3))

关于python - 如何获取条件成立的二维数组分段的开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59511521/

相关文章:

python - 加速 NumPy 中许多像素位置的线性插值

python - Pandas dataframe.dot 划分方法

algorithm - 在一个大的稀疏矩阵中找到子密集矩阵的所有矩形

python - 如何创建具有低于 : 的某些给定条件的二进制矩阵

python - 引用外部资源时正确使用 __del__

python - 如何从 .log 文件在 .csv 文件中创建行和列

python - 将列表转换为单独的单独列表

python - 每次求和通过某个阈值时如何重新采样?

c# - 如何使用 subprocess.Popen() 通过 python 脚本捕获用 C# 编写的控制台应用程序的标准输入,其中包含 Console.ReadKey()

python - 找不到 swig 命令 - 在本地安装 swig 时