回答:
他の質問は、この質問asanyarrayや他の配列作成ルーチンについて尋ねられる質問にリダイレクトされているので、それぞれの機能について簡単に要約しておく価値があります。
違いは主に、新しい配列をコピーとして作成するのではなく、入力を変更せずに返すタイミングです。
arrayは、コピーするタイミングを決定するフラグを含む、さまざまなオプションを提供します(他のほとんどの機能はその周りの薄いラッパーです)。完全な説明は、ドキュメントと同じくらい長くかかります(配列の作成を参照してください。簡単に言えば、ここにいくつかの例があります:
想定aされndarray、そしてmありmatrix、そして彼らの両方が持っているdtypeのをfloat32:
np.array(a)そしてnp.array(m)それは、デフォルトの動作なので、両方をコピーします。np.array(a, copy=False)そしてnp.array(m, copy=False)コピーしますmが、ないaので、mではありませんndarray。np.array(a, copy=False, subok=True)とのサブクラスであるであるnp.array(m, copy=False, subok=True)ため、どちらもコピーしません。mmatrixndarraynp.array(a, dtype=int, copy=False, subok=True)はdtype互換性がないため、両方をコピーします。他のほとんどの関数はarray、コピーが発生したときにそのコントロールを囲む薄いラッパーです。
asarray:入力は、互換性がある場合ndarray(copy=False)にコピーされずに返されます。asanyarray:入力は、互換性のある、ndarrayまたはmatrix(copy=False、subok=True)のようなサブクラスである場合に、コピーされずに返されます。ascontiguousarray:入力はndarray、連続するC順序(copy=False、order='C')。asfortranarray:ndarray連続したFortran順序(copy=False、order='F')で互換性がある場合、入力はコピーされずに返されます。require:指定された要件文字列と互換性がある場合、入力はコピーされずに返されます。copy:入力は常にコピーされます。fromiter:入力は反復可能として扱われます(objectつまり、反復子を持つ配列の代わりに、反復子の要素から配列を作成できます)。常にコピーされます。そこコンビニエンス機能などもあるasarray_chkfinite(同じコピー規則asarrayが、昇給はValueErrorどんな存在する場合nanまたはinf値)、などサブクラスのコンストラクタmatrixまたはレコードの配列のような特別な場合のためには、もちろん実際のndarrayことができますコンストラクタ(あなたが直接配列を作成しますバッファを超えたストライド)。
の定義asarrayは次のとおりです。
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
したがってarray、オプションが少ないことを除いて、に似ていますcopy=False。デフォルトでarray持っcopy=Trueています。
主な違いは、array(デフォルトでは)オブジェクトのコピーが作成されることですが、asarray必要でない限り作成されません。
array([1, 2, 3])またはasarray([1, 2, 3])?
[1, 2, 3]はPythonリストであるため、を作成するにはデータのコピーを作成する必要がありますndarary。したがって、パラメータをに送信np.arrayする代わりに、直接使用します。この場合のようにコピーを作成する必要がある場合、は無視されます。IPythonで2つを使用してベンチマークを行うと、小さなリストで違いが見られますが、大きなリストでどちらを使用するかはほとんど問題になりません。np.asarraycopy=Falsenp.arraycopy=False%timeit
np.asanyarrayですか?
asarray常にを返しますndarray。渡されたもののasanyarrayサブクラスを返しndarrayます。たとえばnp.matrix、はのサブクラスですndarray。したがってnp.asanyarray(np.matrix(...))、同じ行列を返しますnp.asarray(np.matrix(...))が、行列をに変換しndarrayます。
この違いは、次の例で実証できます。
行列を生成する
>>> A = numpy.matrix(numpy.ones((3,3)))
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])numpy.arrayを変更するために使用しAます。コピーを変更しているため機能しません
>>> numpy.array(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])numpy.asarrayを変更するために使用しAます。あなたA自身を変更しているので、それは働いた
>>> numpy.asarray(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 2., 2., 2.]])お役に立てれば!
違いは、のドキュメントにはかなり明確に言及されているarrayとasarray。違いは引数リストにあり、したがってこれらのパラメーターに応じた関数のアクションにあります。
関数の定義は次のとおりです。
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
そして
numpy.asarray(a, dtype=None, order=None)
以下の引数をに渡すことができるものであるarrayといない asarray文書で述べたように:
copy:bool、オプションtrue(デフォルト)の場合、オブジェクトがコピーされます。そうでない場合、コピーが
__array__返される場合、objがネストされたシーケンスである場合、または他の要件(dtype、順序など)を満たすためにコピーが必要な場合にのみ、コピーが作成されます。subok:bool、オプションTrueの場合、サブクラスがパススルーされます。それ以外の場合、返される配列は強制的にベースクラス配列になります(デフォルト)。
ndmin:int、オプション結果の配列に必要な最小次元数を指定します。この要件を満たすために、必要に応じて形状にプリペンドされます。