Numpyのndarray
とarray
の違いは何ですか?そして、numpyソースコードのどこに実装がありますか?
numpy.array
は、単にndarray
を作成するための便利な関数です。クラス自体ではありません。
numpy.ndarray
を使用して配列を作成することもできますが、推奨される方法ではありません。 numpy.ndarray
のdocstringから:
配列は、
array
、zeros
、またはempty
を使用して構築する必要があります...ここで指定するパラメーターは、配列をインスタンス化するための低レベルメソッド(ndarray(...)
)を参照します。
実装の大部分はCコードであり、 ここではmultiarray ですが、ndarrayインターフェイスの確認はここから開始できます。
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
numpy.array
は、numpy.ndarray
を返す関数です。オブジェクトタイプnumpy.arrayはありません。
Numpy.arrayとnumpy.ndarrayの違いを示すサンプルコードのほんの数行
準備段階:リストを作成する
a = [1,2,3]
タイプを確認してください
print(type(a))
あなたが取得します
<class 'list'>
np.arrayを使用して(リストから)配列を構築
a = np.array(a)
または、ウォームアップ手順をスキップして、直接
a = np.array([1,2,3])
タイプを確認してください
print(type(a))
あなたが取得します
<class 'numpy.ndarray'>
numpy配列のタイプはnumpy.ndarray
次の方法でタイプを確認することもできます
isinstance(a, (np.ndarray))
あなたは得るでしょう
True
次の2行のいずれかでエラーメッセージが表示されます。
np.ndarray(a) # should be np.array(a)
isinstance(a, (np.array)) # should be isinstance(a, (np.ndarray))
numpy.ndarray()はクラスであり、numpy.array()はndarrayを作成するメソッド/関数です。
numpy docsでは、ndarrayクラスから配列を作成する場合は、引用されている2つの方法でそれを行うことができます:
1- array()、zeros()、またはempty()メソッドを使用:Arraysは、array、zeros、またはemptyを使用して構築する必要があります(以下の関連セクションを参照)。ここで指定するパラメーターは、配列をインスタンス化するための低レベルのメソッド(ndarray(…))を参照します。
2- ndarrayクラスから直接:newを使用して配列を作成する2つのモードがあります。bufferがNoneの場合、shape、dtype、orderのみが使用されます。bufferがバッファを公開するオブジェクトの場合インターフェイス、すべてのキーワードが解釈されます。
以下の例では、バッファー値を割り当てなかったため、ランダム配列を示しています。
np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None) array([[ -1.13698227e+002, 4.25087011e-303], [ 2.88528414e-306, 3.27025015e-309]]) #random
別の例は、配列オブジェクトをバッファの例に割り当てることです。
>>> np.ndarray((2,), buffer=np.array([1,2,3]), ... offset=np.int_().itemsize, ... dtype=int) # offset = 1*itemsize, i.e. skip first element array([2, 3])
上記の例から、リストを「バッファ」に割り当てることができないことに気づき、numpy.array()を使用してバッファのndarrayオブジェクトを返す必要がありました。
結論:「numpy.ndarray()オブジェクト」を作成する場合は、「numpy.array()」を使用します。
np.array()
を使用すると、np.isfortran()
を使用してチェックするとfalseと表示される場合と同様に、Cのみを作成できると思います。ただし、np.ndarrray()
では、指定された順序に基づいて作成する順序を指定します。