asarray関数とarray関数はどちらも引数に指定したリストやタプルからnumpy配列を生成する関数です。
この2つにはどのよう違いがあるのかについて解説します。
簡単な実行結果

まず、array関数とasarray関数の簡単な実行結果を見てみます。
import numpy as np
a = [1,2,3]
b = np.array(a)
c = np.asarray(a)
print(b)
print(c)
//[1 2 3]
//[1 2 3]
リストaに対しての実行結果は同じとなりました。
次にasarray関数とarray関数によって作ったそれぞれのNumpy配列のコピーを作ってコピーの要素を変えてみます。
まず、array関数の場合
import numpy as np
a = [1,2,3]
b = np.array(a)
b_copy = b
b_copy[0] = 2
print(b)
print(b_copy)
//[2 2 3]
//[2 2 3]
次にasarray関数の場合
import numpy as np
a = [1,2,3]
c = np.asarray(a)
c_copy = c
c_copy[0] = 2
print(c)
print(c_copy)
//[2 2 3]
//[2 2 3]
どちらもNumpy配列のコピーとコピー元が同期しています。
違い

ここまでは、同じ実行結果となりました。
これから、Numpy配列を別のNumpy配列に変換する場合の実行結果を見ていきます。
まず、array関数の場合
import numpy as np
a = [1,2,3]
b = np.array(a)
b_copy = np.array(b)
b_copy[0] = 2
print(b)
print(b_copy)
//[1 2 3]
//[2 2 3]
変換されたNumpy配列と変換元のNumpy配列は同期していないようです。
次にasarray関数の場合を見ていきます。
import numpy as np
a = [1,2,3]
c = np.asarray(a)
c_copy = np.asarray(c)
c_copy[0] = 2
print(c)
print(c_copy)
//[2 2 3]
//[2 2 3]
変換先のNumpy配列と変換元のNumpy配列が同期しています。
asarray関数とarray関数の違いはNumpy配列からNumpy配列に変換する場合に、元の配列と変換された配列が同期されるかしないかのようです。
まとめ
- ・array関数とasarray関数の挙動は基本的には変わらない
- ・Numpy配列からNumpy配列への変換をする際に、変換元と変換先での配列を同期するかしないかが違いとなる(arrayだと同期しない、asarrayだと同期する)
コメント