2016-08-13 12 views
2

reshape()のプロトタイプはreshape(shape, order="C")であり、形状のタイプはタプルです。 だから私たちはこの機能をmyarray.reshape((1000, 1, 32, 32))と呼ぶべきですが、私は多くの用途がmyarray.reshape(1000, 1, 32, 32)だとわかります、なぜですか?ndarray.reshape関数を理解するには?

答えて

3

これは、reshapeメソッドに組み込まれている隠された柔軟性のビットです。

ここでのキーワードは、明示的である必要があります:あなたはたとえばませんことができます。

myarray.reshape(1000, 1, 32, 32, "C") 

あなたはTypeErrorを得るでしょう、整数が必要であることを言って。

(実際には、でもタプル使用:。

myarray.reshape((1000, 1, 32, 32), "C") 

TypeError提起を)

あなたがソースコードを見てみると後(例えば、GitHubで、あなたは、そのが表示されますキーワードが解析されると、0または1の引数のチェックが行われます。その場合、引数はタプルとして解釈されます。引数が複数ある場合は、それぞれが整数として解釈され、タプルが新しいシェイプとして組み合わされます議論は既に取り出されている)


どちらを使用するべきか:本当に良い答えはないと思います。
ドキュメントに固執し、タプルを使用することができます。
しかし、多整数引数の規約では、むしろ明らかです。

あなたまたはあなたが作業しているプロジェクトに、(s)を使用するという規則に従ってください。同じプロジェクトでタプルと整数引数を使用しないでください。

+0

この関数のプロトタイプがタプルでなければならないのであれば、Pythonのリーマードの整数引数はタプルとして正しいのでしょうか?たとえば、プロトタイプが 'function(tuple、other = something)'で、この関数をタプルの括弧なしでfunction(tuple [0]、tuple [1]、other = something')と呼ぶことができます。 – Asuka

+0

自動的にタプルに集約されることはありません;あなたは単にあなたの例題を試して結果を見ることができますが、プロトタイプは基本的に 'function(* args、** kwargs)'です。 – Evert

+0

さて、プロトタイプを見つけたときに分かりました。 – Asuka

関連する問題