回答:
他の質問は、この質問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)
ため、どちらもコピーしません。m
matrix
ndarray
np.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.asarray
copy=False
np.array
copy=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、オプション結果の配列に必要な最小次元数を指定します。この要件を満たすために、必要に応じて形状にプリペンドされます。