2

配列からの削除について質問があります。推定 900^3 サイズの 3D numpy 配列 (座標は z、y、x) があります。ゼロ以外の値はごくわずかですが、それらの空間分布は自明ではありません。その配列内のゼロしかない 2-D スライスをすべて削除したいと考えています。言い換えれば、関連するすべてのデータがまだ含まれている最小サイズの配列が必要です。

私の試みは次のようになります:

    while np.all(a[0]==0):
        a=np.delete(a,0,0)
    while np.all(a[a.shape[0]-1]==0) and a.shape[0]>1:
        a=np.delete(a,-1,0)

z方向で機能するようです。他の 2 つの方向で同じことを行うにはどうすればよいですか? そして、それをより良くする別の方法はありますか?

別のアイデアは

tmp=np.delete(tmp,np.all(tmp==0,axis=1),1)

しかし、それは最初からしか機能しないようで、最後にゼロを除外します。

3D空間で配列を回転させることは可能ですか?

4

2 に答える 2

0

転置を使用して軸を再配置できますが、実際にはスパース配列を探しているようです。

于 2012-11-30T12:03:36.910 に答える
0

これは楽しい問題です。これが私が思いついたものです。

for ax in range(3):
    all_but_ax = [i for i in range(3) if i != ax]
    a = delete(a, where(apply_over_axes(sum, abs(a), all_but_ax).ravel() == 0), 
                  ax)

したがってabs(a)、現在の軸 == 現在の 2D スライス以外のすべてを調べて、それがゼロかどうか、つまり空であることを確認します。はwhere、削除のインデックスを提供します。

于 2012-12-02T19:59:51.953 に答える