当前位置: 首页 > 面试题库 >

NumPy中的ndarray是否具有“边界框”功能(值非零的切片)?

孟哲
2023-03-14
问题内容

我正在处理通过numpy.array()创建的数组,我需要在画布上绘制模拟图像的点。由于包含有意义数据的数组中心部分周围有很多零值,因此我想“修剪”该数组,删除仅包含零的列和仅包含零的行。

因此,我想了解一些本机numpy函数,甚至是要“修剪”的代码片段,或者找到“边界框”以仅对数组中包含数据的部分进行切片。

(因为这是一个概念性问题,所以我没有放置任何代码,如果可以的话,抱歉,我非常愿意在SO上发布。)

谢谢阅读


问题答案:

以下来自此答案的代码在我的测试中运行最快:

def bbox2(img):
    rows = np.any(img, axis=1)
    cols = np.any(img, axis=0)
    ymin, ymax = np.where(rows)[0][[0, -1]]
    xmin, xmax = np.where(cols)[0][[0, -1]]
    return img[ymin:ymax+1, xmin:xmax+1]

使用的可接受答案argwhere有效,但运行速度较慢。我的猜测是,这是因为argwhere分配了巨大的索引输出数组。我在大型2D阵列(1024 x
1024图像,大约50x100非零区域)上进行了测试。



 类似资料:
  • 我就是这样做的https://tour.golang.org/moretypes/10我修改了代码,希望得到相同的结果。我没有。这是错误还是文档错误?美国之旅 nil片的长度和容量为0。 我的y变量的长度和容量为0。 这是我的输出。 我还以为会有第二个“零”~为什么我没拿到?

  • 问题内容: 我有以下CSS: 添加边框半径:5px似乎没有任何作用,我认为这是因为我使用的是边框渐变,我是否有办法完全实现所需的5px边框半径? 问题答案: You cannot use with gradient. Here is another idea where you can rely on multiple background and adjust the : 如果需要透明性,可以考

  • 问题内容: 我只是注意到的功能有一个奇怪的行为: 另一方面,似乎有正常的行为。有人知道为什么用该函数初始化一个小的numpy数组比一个大的数组要花更多的时间吗? (Python 3.5,numpy 1.11) 问题答案: 看起来好像达到了一个阈值,在该阈值下,操作系统会要求将内存清零,而无需手动对其进行初始化。查看源代码,最终委托来获取清零的内存块,如果与进行比较,则不执行初始化: 您会看到500

  • 使用正则表达式匹配表达式 为什么这两个示例匹配如下(突出显示): c# < code>a #b #c #d 具体来说,为什么第一个字符串不匹配包含最后一个#之前的所有内容? 由于单词边界(\b)是零宽度匹配,可以在单词字符(\w)和非单词字符(\ w)之间匹配,或者在单词字符和字符串的开始或结束之间匹配,我不确定以非单词字符结束表达式会如何影响匹配。

  • 问题内容: 不幸的是,HTML中没有CDATA。 遗憾的是,因为它非常适合添加包含XML的注释,因此您不必转义<和>,例如: 但是,可以识别CDATA部分,然后将其转换为HTML。例如: 或者它可以使用比CDATA更简单的语法。因为是可扩展的,所以可能有人添加了此功能。也许已经将它埋在里面的某处…有人知道吗? 问题答案: 您可以使用JavaDoc的标签:

  • 问题内容: SASS具有一个称为的功能,该功能允许选择器继承另一个选择器的属性,但不复制属性(如mixins)。 LESS是否也具有此功能? 问题答案: 是的,Less.js推出的V1.4.0。 LESS没有实现SASS和Stylus使用的at- rule()语法,而是实现了伪类语法,这为LESS的实现提供了灵活性,使其可以直接应用于选择器本身或在语句内部。因此,这两个都将起作用: 要么 此外,您