2016-04-28 24 views
0

私は、1と0で構成される大きな3d numpy配列を持っています。 scipy.ndimage.labelツールを使用して、各サブアレイ(2d)のフィーチャにラベルを付けたいと思います。ラベルscipy.ndimage.labelを持つnumpyの配列

3D-配列のサブセットは、次のようになります。私はこのサブセットの小さな部分にラベルツールを使用すると

subset=np.array([[[1, 0, 0], 
    [1, 0, 1], 
    [0, 0, 0]], 

    [[0, 0, 0], 
    [1, 0, 1], 
    [0, 0, 1]], 

    [[0, 0, 0], 
    [1, 0, 0], 
    [0, 1, 1]], 

    [[0, 0, 0], 
    [1, 0, 0], 
    [1, 1, 1]]], dtype=uint8) 

作品が修正されます。

>>>label(subset[0:3])  
(array([[[1, 0, 0], 
    [1, 0, 2], 
    [0, 0, 0]], 

    [[0, 0, 0], 
    [1, 0, 2], 
    [0, 0, 2]], 

    [[0, 0, 0], 
    [1, 0, 0], 
    [0, 2, 2]]]), 2) 

しかし、私が使用している場合サブセット全体が正しく機能していません。

>>>label(subset) 
(array([[[1, 0, 0], 
    [1, 0, 1], 
    [0, 0, 0]], 

    [[0, 0, 0], 
    [1, 0, 1], 
    [0, 0, 1]], 

    [[0, 0, 0], 
    [1, 0, 0], 
    [0, 1, 1]], 

    [[0, 0, 0], 
    [1, 0, 0], 
    [1, 1, 1]]]), 1) 

どのような問題が解決できるのでしょうか?

ps。 私がラベルしようとしている完全な配列は、350219個の2次元アレイで構成されています。

+1

私はあなたが 'structure'を指定する必要があると思いますデフォルトで想定されるような3次元配列ではなく、1次元の2次元配列を与えます。 –

+0

[[0,1,0]、 [1,1]]のように2次元構造を定義すると、 [0、1、0]] エラーが発生しました:構造体と入力のランクが同じでなければなりません –

+1

2次元構造体を3dにする必要があります。つまり、1つのディムの長さが1である必要があります。 –

答えて

0

私はdan-manの助けを借りてこの質問に答えました。

私は、ラベルツールの新しい3D構造を定義する必要がありました:

str_3D=array([[[0, 0, 0], 
    [0, 0, 0], 
    [0, 0, 0]], 

    [[0, 1, 0], 
    [1, 1, 1], 
    [0, 1, 0]], 

    [[0, 0, 0], 
    [0, 0, 0], 
    [0, 0, 0]]], dtype='uint8') 

今、ラベルは私のサブセットに対して次の値を返します。

>>> label(subset,structure=str_3D) 
# outputs: 
(array([[[1, 0, 0], 
    [1, 0, 2], 
    [0, 0, 0]], 

    [[0, 0, 0], 
    [3, 0, 4], 
    [0, 0, 4]], 

    [[0, 0, 0], 
    [5, 0, 0], 
    [0, 6, 6]], 

    [[0, 0, 0], 
    [7, 0, 0], 
    [7, 7, 7]]]), 7) 
関連する問題