21

numpy.array() を介して作成された配列を扱っており、イメージをシミュレートするキャンバス上にポイントを描画する必要があります。意味のあるデータを含む配列の中央部分には多くのゼロ値があるため、配列を「トリム」して、ゼロのみを含む列とゼロのみを含む行を消去したいと思います。

したがって、配列のデータを含む部分のみをスライスするために、ネイティブの numpy 関数や、「トリム」または「バウンディング ボックス」を見つけるためのコード スニペットについて知りたいと思います。

(これは概念的な質問なので、コードは入れませんでした。申し訳ありませんが、SOに投稿するのはとても新鮮です。)

読んでくれてありがとう

4

3 に答える 3

24

これはそれを行う必要があります:

from numpy import array, argwhere

A = array([[0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0],
           [0, 0, 1, 0, 0, 0, 0],
           [0, 0, 1, 1, 0, 0, 0],
           [0, 0, 0, 0, 1, 0, 0],
           [0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0]])

B = argwhere(A)
(ystart, xstart), (ystop, xstop) = B.min(0), B.max(0) + 1 
Atrim = A[ystart:ystop, xstart:xstop]
于 2011-01-26T19:29:00.207 に答える
0

何かのようなもの:

empty_cols = sp.all(array == 0, axis=0)
empty_rows = sp.all(array == 0, axis=1)

結果の配列は1Dboolian配列になります。それらを両端からループして、「バウンディングボックス」を見つけます。

于 2011-01-26T19:11:20.857 に答える