2011-11-21 20 views
20

Numpyを使用するPythonプログラムでiterableオブジェクトとarray_likeオブジェクトの違いは何ですか?用語:PythonとNumpy - `iterable`と` array_like`

iterablearray_likeは、多くの場合、Pythonのマニュアルに記載されていて、いくつかの同様のプロパティを共有しています。

このコンテキストではarray_likeオブジェクトはNumpyブロードキャストのようなタイプの操作をサポートするはずですが、Numpy配列領域もiterableです。 array_likeは、拡張子(またはスーパーセット?)がiterableであると言うのは正しいですか?

答えて

23

"array-like"という用語は実際にNumPyでのみ使用されており、配列を作成するためにnumpy.array()の最初のパラメータとして渡すことができるものを指します。

用語"iterable"は、標準のPython用語であり、繰り返し処理できるものを指します(たとえば、for x in iterableを使用)。

ほとんどの配列のようなオブジェクトは、スカラー型を除いて反復可能です。

多くのiterablesは配列のようなものではありません。たとえば、numpy.array()を使用してジェネレータ式からNumPy配列を構築することはできません。しかし、代わりにnumpy.fromiter()を使用する必要がありますが、NumPyドキュメントの用語では、ジェネレータ式は「配列のような」ものではありません)。

+0

グレート:ここ

は "numpyの-ディスカッション" メーリングリストからの確認です。それはそれをクリアします。特に 'array-like'と' numpy.array() 'の最初の引数の間のリンクです。 – dtlussier

+0

"配列のようなオブジェクトはすべて反復可能です" - これは正しくありません。 '' int int'''型のスカラー値は配列のようなもので、 '' numpy.array() '' 'に渡すことができますが、iterableではありません。 – wombatonfire

+0

@wombatonfireはい、そうです。実際の0次元の配列でさえも、それは明らかに「配列のような」ものですが、反復することはできません。それらは配列さえあります。 –

3

Svenの答えの最初の部分は正しいが、その配列のようなオブジェクトを必ずしも反復可能にする必要はありません。

例えば、numpy.rint()関数の使用に興味があり、配列のようなオブジェクトを受け取り、タイプがintのスカラーであると考えました。彼らは反復可能ではありませんが、受け入れられます。 intnumpy.array()に渡すこともできるので、のような配列になります。 - 感謝https://mail.scipy.org/pipermail/numpy-discussion/2016-November/076224.html

関連する問題