gpt4 book ai didi

wolfram-mathematica - 在不显式迭代的情况下找到满足某些条件的最大矩形 block

转载 作者:行者123 更新时间:2023-12-04 03:16:52 28 4
gpt4 key购买 nike

我有一些大型2D阵列,例如:

   1   2  3  4  5
--------------
1 | 0 1 1 1 0
2 | 0 1 1 1 0
3 | 0 1 0 1 1
4 | 0 1 0 1 1

因此,满足 ==1的最大矩形块(按区域)从(1,2)开始,其尺寸为(2,3)。

如何在不进行显式迭代的情况下使用Mathematica找到它?

注意:

为了简化您的测试,这里是我的示例之一:
matrix = ImageData@Binarize@Import@"http://i.stack.imgur.com/ux7tA.png"

最佳答案

这是我尝试使用BitAnd

maxBlock[mat_] := Block[{table, maxSeq, pos},

maxSeq[list_] :=
Max[Length[#] & /@ Append[Cases[Split[list], {1 ..}], {}]];

table =
Flatten[Table[
MapIndexed[{#2[[1]], maxSeq[#1]} &,
FoldList[BitAnd[#1, #2] &, mat[[k]], Drop[mat, k]]], {k, 1,
Length[mat]}], 1];

pos = Ordering[(Times @@@ table), -1][[1]];

{Times[##], {##}} & @@ table[[pos]]]

belisarius图片的结果:
Timing[maxBlock[Unitize[matrix, 1.]]]

(* {1.13253, {23433, {219, 107}}} *)

从好的方面来说,此代码似乎比David和Sjoerd的代码快,但是由于某种原因,它返回的矩形在两个维度上均比其结果小一个。由于差异恰好是一个,因此我怀疑某个地方存在计数错误,但目前无法找到它。

关于wolfram-mathematica - 在不显式迭代的情况下找到满足某些条件的最大矩形 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7161332/

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