array()Numpyとasarray()関数の違いは何ですか?どちらを使用する必要がありますか?それらは、私が考えることができるすべての入力に対して同一の出力を生成するようです。
6 に答える
の定義asarrayは次のとおりです。
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
つまりarray、オプションが少ないことを除けば、と似ていますcopy=False。arrayデフォルトで持っcopy=Trueています。
主な違いは、array(デフォルトでは)オブジェクトのコピーを作成しますが、asarray必要な場合を除いて作成しないことです。
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ようなサブクラスである場合、入力はコピーされずに返されます。matrixcopy=Falsesubok=Trueascontiguousarrayndarray:入力は、連続するC順序(copy=False、 。)で互換性がある場合、コピーされずに返されorder='C')ます。asfortranarrayndarray:入力は、連続するFortranの順序(copy=False、 )で互換性がある場合、コピーされずに返されorder='F'ます。require:指定された要件文字列と互換性がある場合、入力はコピーされずに返されます。copy:入力は常にコピーされます。fromiter:入力はイテレータとして扱われます(たとえば、イテレータを使用したobject配列の代わりに、イテレータの要素から配列を作成できます)。常にコピーされます。
asarray_chkfinite(と同じコピールールですが、または値がある場合はasarray発生します)のような便利な関数、レコード配列のようなまたは特別な場合のサブクラスのコンストラクター、そしてもちろん実際のコンストラクター(配列を直接作成できます)もありますバッファー上のストライドから)。ValueErrornaninfmatrixndarray
この違いは、次の例で示すことができます。
行列を生成する
>>> 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、optional true(デフォルト)の場合、オブジェクトがコピーされます。それ以外の場合、コピーは、コピーを
__array__返す場合、objがネストされたシーケンスである場合、または他の要件(dtype、orderなど)のいずれかを満たすためにコピーが必要な場合にのみ作成されます。subok:bool、オプションTrueの場合、サブクラスはパススルーされます。それ以外の場合、返される配列は強制的に基本クラスの配列になります(デフォルト)。
ndmin:int、optional結果の配列に必要な次元の最小数を指定します。この要件を満たすために、必要に応じて形状にプリペンディングされます。
asarray(x)のようなものですarray(x, copy=False)
他の操作を実行する前に、それが配列であることasarray(x)を確認する場合に使用します。xがすでに配列である場合x、コピーは実行されません。冗長なパフォーマンスへの影響は発生しません。
xこれは、最初に配列に変換されることを保証する関数の例です。
def mysum(x):
return np.asarray(x).sum()
違いを示すことができる簡単な例を次に示します。
主な違いは、配列が元のデータのコピーを作成し、別のオブジェクトを使用して元の配列のデータを変更できることです。
import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)
配列(a)のコンテンツは変更されませんが、元の配列のコンテンツを変更することなく、別のオブジェクトを使用してデータに対して任意の操作を実行できます。