2

ファイルから多次元numpy配列にデータを読み取る関数を実装しています。データは次元の長さの意味で規則的に構造化されていますが、一部の次元が欠落している可能性があります。その場合、その次元の長さは0. だから私はこの振る舞いに出くわしました:

In [1]: np.random.random((3,3))
Out[1]: 
array([[ 0.59756568,  0.47198749,  0.23442854],
       [ 0.29374254,  0.58289927,  0.40497268],
       [ 0.00481053,  0.63471263,  0.90053086]])

In [2]: np.random.random((0,3,3))
Out[2]: array([], shape=(0, 3, 3), dtype=float64)

OK、空の配列を取得します。これは、2 次元と 3 次元が 1 次元のサブセットであり、nil であるため、配列全体が nil であるため、これを見ると理にかなっています。np.random.random((3,3,0))ただし、と同等であると期待していますnp.random.random((3,3))。でも、

In [3]: np.random.random((3,3,0))
Out[3]: array([], shape=(3, 3, 0), dtype=float64)

再び空の配列。

これは予想される動作ですか?np.array((3,3))np.array((3,3,1))またはの違いは理解していますが、長さの次元がその次元だけでなく配列全体を縮退np.array((1,3,3))させる理由の説明を探しています。0それは私だけですか、それともこれは Python/numpy WTF の 1 つですか?

4

1 に答える 1

1

コメントで述べているように、いずれかの次元がゼロの場合、配列のサイズは常にゼロであるため、空の配列が取得されます。何をしようとしているのか聞いてもいいですか?空の3次元が必要な場合は、次のように試すことができます。

>>> x = numpy.random.random((3,3))
>>> y = x[..., numpy.newaxis]
>>> y

array([[[ 0.92418241],
        [ 0.76716579],
        [ 0.82485034]],

       [[ 0.30571695],
        [ 0.71012271],
        [ 0.54609355]],

       [[ 0.98192734],
        [ 0.25505518],
        [ 0.75473749]]])

>>> y.shape
(3, 3, 1)

>>> x.shape
(3, 3)
于 2012-05-18T17:58:24.817 に答える