numpyのnp.array()とnp.asarrayの違い



Difference Between Np



arrayとasarrayはどちらも構造化データをndarrayに変換できますが、主な違いは、データソースがndarrayの場合、arrayはコピーをコピーし、新しいメモリを占有しますが、asarrayは変換しません。

1.リストとして入力する場合、変換する元のデータ型がリストの場合



import numpy as np a=[[1,2,3],[4,5,6],[7,8,9]] b = np.array(a) c = np.asarray(a) a[1] = 1 print(a) # [[1, 2, 3], 1, [7, 8, 9]] print(b) ''' [[1 2 3] [4 5 6] [7 8 9]] ''' print(c) ''' [[1 2 3] [4 5 6] [7 8 9]] '''

このことから、np.arrayは入力を行列形式に変換するnp.asarrayと同じであることがわかります。入力がリストの場合、リストの値を変更しても、マトリックスに変換される値には影響しません。

2.入力が配列の場合



import numpy as np a=np.random.random((3,3)) print(a.dtype) # float64 b=np.array(a,dtype='float64') c=np.asarray(a,dtype='float64') a[1]=2 print(a) ''' [[0.31327972 0.33505141 0.63028714] [2. 2. 2. ] [0.84950484 0.27039307 0.80752204]] ''' print(b) ''' [[0.31327972 0.33505141 0.63028714] [0.15328483 0.38864211 0.71189085] [0.84950484 0.27039307 0.80752204]] ''' print(c) ''' [[0.31327972 0.33505141 0.63028714] [2. 2. 2. ] [0.84950484 0.27039307 0.80752204]] ''' print(b is a) # False print(c is a) # True

上記の結果から、np.arrayとnp.asarrayの違いを確認できます。入力が配列の場合、np.arrayは配列スペースを再作成し、そこにデータをコピーします。独自のメモリ領域があるため、np.arrayの出力は入力とnp.asarray関数によって変化します。配列aを指すカウンタをインクリメントし、配列を指すため、元の配列が変更されると、npの出力が変化します。 .asarrayも変更されます。