1

私はNumPy arrayサイズ(3、3)のを持っています。モジュールarray内の形状を印刷すると、が得られます。ただし、この配列を関数に渡しており、関数でそのサイズを出力すると、が取得されます。__main__(3, 3)(3, )

なぜこれが起こるのですか?

また、タプルの最後の要素が指定されていないことはどういう意味ですか?つまり、(3, )そもそも無効なタプルであってはなりませんか?

4

3 に答える 3

2

このようなタプル:(3, )は、単一の要素 (この場合は単一の次元) を持つタプルであることを意味します。これは正しい構文です - 末尾を付けたのは、次の,ようになっているためです: (3)Python はそれをタプルではなく、括弧で囲まれた数値として解釈します。

実際のコードを見ると便利ですが、配列全体ではなく、行 (または列) のみを渡していると思います。

于 2013-03-11T03:13:02.187 に答える
2

コードを見ないと、なぜ関数呼び出しが numpy 配列を再形成するのかを知るのは困難です。

2 番目の質問では、これが単一要素のタプルの標準的な表記法です。角かっこではなくコンマがタプルになっています。考慮してください(3+3) * 2-ブラケットがタプルを作成した場合、タプルにintを掛けることはできないため、その式全体が無効になります。より一般的には、Python ではあらゆる場所で末尾のコンマを使用できます。

>>> (3,3,) == (3,3)
True

これは、リスト、辞書、および関数呼び出しでも機能します。基本的に、Python がコンマ区切りの要素を想定している場合は、末尾のコンマが有効です。

于 2013-03-11T03:14:27.597 に答える
2

2 番目の質問に答えるには:

Python のタプルは n 次元です。1-2-3-...-nつまり、タプルを持つことができます。1-dimensional構文により、タプルを表す方法('element',)では、末尾のコンマが必須になります。持っている場合('element')、これは単なる括弧内の式です。だから(3) + 4 == 7、しかし(3,) + 4 == TypeError。同じく('element') == 'element'.

最初の質問に答えるには:

配列を渡す際に何か間違ったことをしている可能性が高いです。NumPy 配列が、配列になんらかのタイプの変更がなければ、それ自体を誤って表現する理由はありません。

于 2013-03-11T03:15:40.190 に答える