6

次のようなバイナリ行列があります。

0 0 0 0 0 0
0 0 0 1 0 0
0 1 0 0 0 0
0 0 1 0 1 0
0 0 0 1 0 0
0 0 0 0 0 0

そして、この行列を次のようにトリムします (つまり、境界のゼロを削除します)。

0 0 1 0
1 0 0 0
0 1 0 1
0 0 1 0

これを「Matlab」の方法で行うには? それは、従来のループと条件を使用しないことです。

より明確にするために、行列は、少なくとも 1 つの を含む最初の列から開始し1、同じ条件を含む最後の列で終了するように縮小する必要があります。この範囲外の列はすべて削除する必要があります。行にも同じ規則が適用されます。

ありがとう。

4

3 に答える 3

9

マトリックスにデータがある場合M...

x = find(any(M,2),1,'first'):find(any(M,2),1,'last');
y = find(any(M),1,'first'):find(any(M),1,'last');
M(x, y)

または、エッジを除くすべての行/列に 1 があることがわかっている場合:

M(any(M,2), any(M))
于 2013-02-22T15:21:55.993 に答える
0

find行と列のインデックスを返すことができるという事実を使用できます。

[r1, c1] = find(x, 1, 'first')
[r2, c2] = find(x, 1, 'last')
x(r1:r2, c1:c2)
于 2013-02-22T15:35:17.323 に答える